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



