简体   繁体   English

如何获取 xml 文档的所有命名空间以进行正确的 XPath 评估?

[英]How to get all namespaces of xml document for correct XPath evaluating?

I try to evaluate simple xpath我尝试评估简单的 xpath

"//pr:Name"

for this xml对于这个 xml

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

but I get xml file in run-time ie I can't fill XmlNamespaceManager using method AddNamespace() (this why evaluating failed).但是我在运行时得到了 xml 文件,即我无法使用 AddNamespace() 方法填充 XmlNamespaceManager(这就是评估失败的原因)。 I tried to do this trick我试着做这个把戏

    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);

but it does not help me.但这对我没有帮助。 Do you have any idea how to resolve namespaces for XPath or evaluate XPath in other way?您知道如何为 XPath 解析命名空间或以其他方式评估 XPath 吗? Thank you!谢谢!

If you don't know namespace at compile time, you might probably use this XPath:如果你在编译时不知道命名空间,你可能会使用这个 XPath:

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

This XPath selects all Name elements.此 XPath 选择所有Name元素。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM