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