2010-07-13 62 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")); 
相关问题