2010-07-13 37 views
0

我必須從xml文件中獲取某些節點(它們的InnerText)。我知道他們的名字,但是節點可能使用了我不知道的一些命名空間。 在不知道節點正在使用的名稱空間的情況下,是否可以使用SelectSingleNode()或其他方法獲取節點?有沒有可能忽略節點正在使用的名稱空間?在不知道命名空間的情況下獲取單個節點

回答

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> 
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")); 
相關問題