当前位置:  开发笔记 > 编程语言 > 正文

XPATHS和默认命名空间

如何解决《XPATHS和默认命名空间》经验,为你挑选了2个好方法。

XPath背后的故事是什么以及对名称空间的支持?XPath作为规范在命名空间之前吗?如果我有一个文档,其中元素已被赋予默认命名空间:


似乎某些XPath处理器库//foo由于名称空间而无法识别,而其他库将会识别.我的团队所考虑的选项是使用正则表达式向XPath添加名称空间前缀(可以通过XmlNameTable添加名称空间前缀),但这似乎很脆弱,因为在节点测试时XPath是一种非常灵活的语言.

是否有适用于此的标准?

我的方法有点hackish但似乎工作正常; 我xmlns用搜索/替换删除声明,然后应用XPath.

string readyForXpath = Regex.Replace(xmldocument, "xmlns=\".+\"", String.Empty );

这是一种公平的方法还是有人以不同方式解决了这个问



1> Stu..:

你需要local-name():

http://www.w3.org/TR/xpath#function-local-name

来自http://jcooney.net/archive/2005/08/09/6517.aspx的婴儿床:


  
    
              

此表达式将匹配"bar"元素:

  //*[local-name()='bar'] 

这个不会:

 //bar



2> Andrew Cowen..:

我尝试了类似于古代建议的东西,无法让它发挥作用.由于我从已发布的服务获取数据,因此无法更改xml.我最终使用XmlDocument和XmlNamespaceManager,如下所示:

XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlWithBogusNamespace);            
XmlNamespaceManager nSpace = new XmlNamespaceManager(doc.NameTable);
nSpace.AddNamespace("myNs", "http://theirUri");

XmlNodeList nodes = doc.SelectNodes("//myNs:NodesIWant",nSpace);
//etc

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有