您可以尝试一些技巧;您使用哪一个将取决于您需要从文档中获取哪些信息、您想要的严格程度以及您使用的 XPath 实现的一致性程度。
获取与特定前缀关联的命名空间 URI 的一种方法是使用namespace::
轴。这将为您提供一个名称空间节点,其名称是前缀,其值是名称空间 URI。例如,您可以使用以下路径获取文档元素上的默认命名空间 URI:
/*/namespace::*[name()='']
您也许可以使用它来为您的 XPathNavigator 设置名称空间关联。但是请注意,namespace::
轴是 XPath 1.0 中并不总是实现的那些角落之一。
获取该命名空间 URI 的第二种方法是使用namespace-uri()
文档元素上的函数(您说过将始终在该命名空间中)。表达方式:
namespace-uri(/*)
会给你那个命名空间。
另一种方法是忘记将前缀与该名称空间相关联,而只是使您的路径无名称空间。local-name()
每当您需要引用一个您不知道其名称空间的元素时,您都可以使用该函数来做到这一点。例如:
//*[local-name() = 'Element']
如果您真的想要,您可以更进一步,针对文档元素之一测试元素的命名空间 URI:
//*[local-name() = 'Element' and namespace-uri() = namespace-uri(/*)]
考虑到名称空间对您似乎没有任何意义,最后一个选择是通过一个过滤器运行您的 XML,该过滤器去除名称空间。然后,您根本不必担心 XPath 中的它们。最简单的方法是简单地xmlns
使用正则表达式删除属性,但如果您需要同时进行其他整理,您可以做一些更复杂的事情。