如何获取 xml 文档的所有名称空间以进行正确的 XPath 评估?
How to get all namespaces of xml document for correct XPath evaluating?
我尝试评估简单的 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 吗?
谢谢!
如果您在编译时不知道名称空间,您可能会使用这个 XPath:
//*[local-name() = 'Name']
此 XPath 选择所有 Name
个元素。
我尝试评估简单的 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 吗? 谢谢!
如果您在编译时不知道名称空间,您可能会使用这个 XPath:
//*[local-name() = 'Name']
此 XPath 选择所有 Name
个元素。