2011-08-17 48 views
0

我使用Xmlreader來解析xml文件。xmlreader skip sibling

我的方法看起來像

string path = @"E:\tmp\testxml.xml"; 
using (var reader = XmlReader.Create(path)) 
{ 

    bool isOnNode = reader.ReadToDescendant("resource"); 
    while (isOnNode) 
    { 
     var element = (XElement)XNode.ReadFrom(reader); 

     isOnNode = reader.ReadToNextSibling("resource"); 
    } 
} 

但XMLReader可以跳過兄弟節點 「資源」。 此外,當我用visual studio打開xml文件時,縮進並保存它,節點不會跳過。

+0

請用適當的語言標籤標記問題。 – 2011-08-17 12:59:59

+1

還請提供XML文件的內容。 – Sven 2011-08-17 14:48:02

回答

1

XNode.ReadFrom方法將讀取器放在讀取的子樹的閉合元素之後。如果文件中沒有空格,則這將是下一個<resource>元素。然後該元素被ReadToNextSibling呼叫跳過。

以下應修復:

string path = @"E:\tmp\testxml.xml"; 
using(var reader = XmlReader.Create(path)) 
{ 

    bool isOnNode = reader.ReadToDescendant("resource"); 
    while(isOnNode) 
    { 
     var element = (XElement)XNode.ReadFrom(reader); 

     if(!reader.IsStartElement("resource")) 
      isOnNode = reader.ReadToNextSibling("resource"); 
    } 
} 

如果沒有非<resource>元件作爲<resource>元件的兄弟姐妹,該問題也可以簡單地通過在while循環條件使用IsStartElement解決。