获取单个节点而不知道其命名空间

时间:2010-07-13 14:00:28

标签: c# xml

我必须从xml文件中获取某些节点(他们的InnerText)。我知道他们的名字,但节点可能正在使用一些我不知道的命名空间。 是否可以在不知道节点使用的命名空间的情况下使用SelectSingleNode()或其他方法获取节点?是否可以忽略节点正在使用的命名空间?

2 个答案:

答案 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"));
相关问题