我必须从xml文件中获取某些节点(他们的InnerText)。我知道他们的名字,但节点可能正在使用一些我不知道的命名空间。 是否可以在不知道节点使用的命名空间的情况下使用SelectSingleNode()或其他方法获取节点?是否可以忽略节点正在使用的命名空间?
答案 0 :(得分:3)
使用与命名空间无关的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>
答案 1 :(得分:0)
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"));