XPath背后的故事是什么以及对名称空间的支持?XPath作为规范在命名空间之前吗?如果我有一个文档,其中元素已被赋予默认命名空间:
似乎某些XPath处理器库//foo
由于名称空间而无法识别,而其他库将会识别.我的团队所考虑的选项是使用正则表达式向XPath添加名称空间前缀(可以通过XmlNameTable添加名称空间前缀),但这似乎很脆弱,因为在节点测试时XPath是一种非常灵活的语言.
是否有适用于此的标准?
我的方法有点hackish但似乎工作正常; 我xmlns
用搜索/替换删除声明,然后应用XPath.
string readyForXpath = Regex.Replace(xmldocument, "xmlns=\".+\"", String.Empty );
这是一种公平的方法还是有人以不同方式解决了这个问
你需要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
我尝试了类似于古代建议的东西,无法让它发挥作用.由于我从已发布的服务获取数据,因此无法更改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