2010-07-28 71 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