c# 无法使用 xpath 读取元素属性

标签 c# xml xpath

此代码无法读取特定属性 - 更具体地说是名称属性。 相反,它读取节点元素的文本并对它们进行连接 - 结果: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/

相关文章:

用于匹配多个类的 XPath 选择器

c# - 如何在 .NET 中抛出的异常的 StackTrace 中获取行号以显示

C#:是否有必要在自定义控件中处理图形元素?

安卓 : edittext alert

xml - 为什么这个 XPath 表达式在 xmlstarlet 中没有返回正确的值?

xslt - 使用 XPath 的 XSLT 查询

c# - 在 asp.net 应用程序中运行 JavaScript 设置的所有站点

c# - 如何将项目升级到 C# 6

javascript - 如果属性以 XX 开头,则从 XML 到 JSON

MySQL:从格式异常的 XML 文件中提取数据