此代码无法读取特定属性 - 更具体地说是名称属性。 相反,它读取节点元素的文本并对它们进行连接 - 结果:1F20 被添加到列表中
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("//Light[@Name]");
返回空白
这是我正在尝试读取的 xml:
<Light Index="1" SetChannel="72" GetChannel="60" Name="y1 d1">
<Nodes>1F</Nodes>
<Nodes>20</Nodes>
</Light>
我做错了什么 - 第一次尝试 xpath...
最佳答案
这是完整的 XML 吗?在这里使用你的代码片段是可行的
XPathExpression expr = nav.Compile("Light/@Name");
只是为了添加 XPathExpression expr = nav.Compile("/Area/Lights/Light[@Name]");
的用法是一个过滤器,您要求的 Light 节点具有一个名为 Name 的属性,或者您可以执行类似 @Name = 'bob'
的操作,其中您要求一个 Name 属性等于 Bob 的 Light 节点
关于c# 无法使用 xpath 读取元素属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3353206/