2010-07-28 79 views
1

此代碼無法讀取特定屬性 - 名稱屬性更具體。 相反,它讀取節點元素的文本和做對他們CONCAT - 結果:1F20添加到列表c#無法讀取具有xpath的元素屬性

var reader = new StringReader(xml); 
      var xmlreader = new XmlTextReader(reader); 
      xmlreader.WhitespaceHandling = WhitespaceHandling.None; 
      var doc = new XPathDocument(xmlreader); 
      var nav = doc.CreateNavigator(); 
      XPathExpression expr = nav.Compile("/Area/Lights/Light[@Name]"); 
      XPathNodeIterator iterator = nav.Select(expr); 

      var list = new List<string>(); 
      while (iterator.MoveNext()) 
      { 
       XPathNavigator nav2 = iterator.Current.Clone(); 
       list.Add(nav2.Value); 
      } 

我也曾嘗試: XPathExpression EXPR = nav.Compile(「//光[@名稱]」);

返回空白

這是XML我想讀:

<Light Index="1" SetChannel="72" GetChannel="60" Name="y1 d1"> 
     <Nodes>1F</Nodes> 
     <Nodes>20</Nodes> 
    </Light> 

我在做什麼錯 - 在XPath的第一次嘗試......

回答

3

這是完整的XML ?使用您的片段在這裏這個作品

XPathExpression expr = nav.Compile("Light/@Name"); 

只是添加的XPathExpression expr = nav.Compile("/Area/Lights/Light[@Name]");的使用是一個過濾器,你所要求的是有一個名爲名稱的屬性的光點,或者你可以做這樣的事情@Name = 'bob',你問一個具有名稱等於Bob的屬性的光節點

+0

刪除[]做了竅門 - 謝謝! – lmkk 2010-07-28 13:38:00

3

您正在嘗試讀取所有Light元素的屬性Name-attribute。

爲了儘量//Light[@Name='xyz']/@NameLight - 元素讀取Name -attribute其中​​或//Light/@Name所有Name -attributes。

請記住,[]是爲條件。

+0

複製粘貼錯誤超過語法,但感謝編輯; D – atamanroman 2010-07-28 13:33:30

+0

我只是*必須*糾正「你的」,它給了我一些毛骨悚然。 :d – Tomalak 2010-07-28 16:37:14

相關問題