首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何读取具有命名空间的XPathDocument

如何读取具有命名空间的XPathDocument
EN

Stack Overflow用户
提问于 2011-12-02 23:27:16
回答 2查看 5.5K关注 0票数 2

我有以下示例XML文件:

代码语言:javascript
复制
<Top xmlns="abbr:SomeNSValue">
  <Next>
    <Other>SomeValue</Other>
  </Next>
</Top>

我把它装起来,试着读成这样:

代码语言:javascript
复制
FileStream stream = new FileStream(@".\TestXML.xml", FileMode.Open);
XPathDocument xPathDocument = new XPathDocument(stream);
XPathNavigator navigator = xPathDocument.CreateNavigator();

XmlNamespaceManager ns = null;
if (navigator.NameTable != null)
{
    ns = new XmlNamespaceManager(navigator.NameTable);
    ns.AddNamespace("abbr", "SomeNSValue");
}

XPathNodeIterator iterator = navigator.Select("/Top/Next", ns);
iterator.MoveNext();

Console.WriteLine(iterator.Current.InnerXml);

这将输出上面所示的完整XML。不是我想要的(我想选择“下一个”节点的内容。)

但是,如果我将xmlns="abbr:SomeNSValue从XML中取出,然后再试一次,我就得到了我想要的:

代码语言:javascript
复制
<Other>SomeValue</Other>

在我的真实场景中,我已经将XML提供给了我,我希望不必修改它来取消Namespace。

有什么方法可以让这个名称空间起作用吗?

注释:--如果重要的话--这是我在XML文件中的实际名称空间:xmlns="urn:hl7-org:v2xml"

EN

回答 2

Stack Overflow用户

发布于 2011-12-03 00:55:34

命名空间声明是错误的:

代码语言:javascript
复制
<Top xmlns:abbr="SomeNSValue">
  <Next>
    <Other>SomeValue</Other>
  </Next>
</Top>

当你做这个神奇的改变,剩下的代码工作:)。

票数 5
EN

Stack Overflow用户

发布于 2017-02-07 00:27:31

这是一个古老的问题,但我从谷歌那里偶然发现了这个问题,试图找出类似的东西。因此,这里有一个答案,可能会帮助其他来自谷歌的人。

我要了解的是,您必须在XPath表达式中指定名称空间前缀(尽管XML文件中没有名称空间前缀)。

代码语言:javascript
复制
ns.AddNamespace("foo", "urn:hl7-org:v2xml"); // make up whatever prefix you want here

后来:

代码语言:javascript
复制
XPathNodeIterator iterator = navigator.Select("/foo:Top/foo:Next", ns);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8363975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档