0
我必须从xml文件中获取某些节点(它们的InnerText)。我知道他们的名字,但是节点可能使用了我不知道的一些命名空间。 在不知道节点正在使用的名称空间的情况下,是否可以使用SelectSingleNode()或其他方法获取节点?有没有可能忽略节点正在使用的名称空间?在不知道命名空间的情况下获取单个节点
我必须从xml文件中获取某些节点(它们的InnerText)。我知道他们的名字,但是节点可能使用了我不知道的一些命名空间。 在不知道节点正在使用的名称空间的情况下,是否可以使用SelectSingleNode()或其他方法获取节点?有没有可能忽略节点正在使用的名称空间?在不知道命名空间的情况下获取单个节点
使用命名空间不可知的XPath。不是特别好或高效,但它的工作原理。
取而代之的是:
/ns1:foo/ns2:bar/ns3:baz
使用本:
/*[local-name() = 'foo']/*[local-name() = 'bar']/*[local-name() = 'baz']
准备面对失去的命名空间的后果:
<ns1:foo>
<wrong:bar>
<wrong:baz /> <!-- this would be selected (false positive) -->
</wrong:bar>
<ns2:bar>
<ns3:baz />
</ns2:bar>
</ns1:foo>
XmlDocument doc = new XmlDocument();
doc.Load("foo.xml");
XmlElement b, f1, f2;
b = (XmlElement)doc.SelectSingleNode("//bar");
f1 = (XmlElement)b.SelectSingleNode("ancestor::foo[1]");
f2 = (XmlElement)b.SelectNodes("ancestor::foo")[0];
Console.WriteLine(f1.GetAttribute("depth"));
Console.WriteLine(f2.GetAttribute("depth"));