Weirdness with XDocument, XPath and namespaces

十年热恋 提交于 2019-11-28 08:32:28

In addition to the correct remark by @Mads-Hansen, you have the typical problem of not defining a (nonempty) prefix for one of the namespaces.

Remember: XPath considers any unprefixed name to be in "no namespace".

Therefore this is wrong:

Source.XPathSelectElement("//kmsg", oManager)

This XPath expression wants to select all kmsg elements that are in "no namespace" and it correctly selects nothing, because any kmsg elements in the provided XML document are in the "http://url1" namespace, and not in "no namespace".

To do it correctly:

oManager.AddNamespace("xxx", "http://url1");      
Source.XPathSelectElement("//xxx:kmsg", oManager)
Mads Hansen

The namespace-URI's declared in your source XML do not match the namespace-URI's that you are registering with your XmlNamespaceManager.

In your source XML:

  1. The anonymous namespace (no prefix) has the namespace-uri: http://url1
  2. The env namespace prefix has the namespace-uri: url1

In your XmlNamespaceManager you declared:

  1. The anonymous namespace (no prefix) has the namespace-uri: http://xml.kerridge.net/k8msg
  2. The env namespace prefix has the namespace-uri: http://xml.kerridge.net/k8msgEnvelope

The namespace-uri values have to match, otherwise you are selecting different element names and will never get a match.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!