【问题标题】:How to get all namespaces of xml document for correct XPath evaluating?如何获取 xml 文档的所有命名空间以进行正确的 XPath 评估?
【发布时间】:2018-10-28 10:49:54
【问题描述】:

我尝试评估简单的 xpath

"//pr:Name"

对于这个xml

<?xml version="1.0" encoding="utf-8"?>
<pr:Products xmlns:pr="http://www.example.com/">
    <pr:Name>Coffee</pr:Name>
</pr:Products>

但我在运行时获得了 xml 文件,即我无法使用 AddNamespace() 方法填充 XmlNamespaceManager(这就是评估失败的原因)。我试着做这个把戏

    XDocument xdoc;
    XmlReader reader;
    using (var stream = new FileStream("test.xml", FileMode.Open))
    {
        reader = new XmlTextReader(stream);
        xdoc = XDocument.Load(reader);
    }
    var nsManager = new XmlNamespaceManager(reader.NameTable);
    var xpath = "//pr:Name";
    var xvalue = xdoc.XPathEvaluate(xpath, nsManager);

但这对我没有帮助。 您知道如何为 XPath 解析名称空间或以其他方式评估 XPath 吗? 谢谢!

【问题讨论】:

标签: c# .net xml xpath xdoc


【解决方案1】:

如果你在编译时不知道命名空间,你可能会使用这个 XPath:

//*[local-name() = 'Name']

此 XPath 选择所有 Name 元素。

【讨论】:

  • 这个解决方案打败了元素命名空间,但它适合第一次使用。谢谢!
猜你喜欢
  • 2013-01-04
  • 2010-10-08
  • 1970-01-01
  • 1970-01-01
  • 2012-04-29
  • 2011-04-28
  • 2020-06-26
  • 1970-01-01
相关资源
最近更新 更多