关于使用Saxon使用默认命名空间对xml进行xpath解析

我想要一些与使用saxon对默认命名空间进行xpath解析相关的信息。 我使用Saxon-HE-9.5.1-3.jar在我的代码中使用xpath 2function。 在类路径中包含saxon库之后,我面临着使用默认命名空间解析XML文档的xpath的问题。

使用以下示例XML:

  
100

有效的XPATH:/ RESPONSE / HEADER / HITS

以下是它工作但不起作用的情况:

  1. “XPATH Works” :未指定命名空间时
    示例:

  2. “XPATH Works” :当给出带前缀的命名空间时
    示例:

  3. “XPATH不起作用” :当给出带有out前缀的默认命名空间时示例:

你能否帮我解释一下为什么撒克逊以不同的方式处理没有命名空间和默认命名空间? 另外,我如何解决使用默认命名空间为文档执行xpath的情况。

下面是我的代码块:

 import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import net.sf.saxon.xpath.XPathEvaluator; import net.sf.saxon.xpath.XPathFactoryImpl; . . . DocumentBuilder builder; Document doc; DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); domFactory.setNamespaceAware(true); builder = domFactory.newDocumentBuilder(); doc = builder.parse(new ByteArrayInputStream(b, 0, size)); XPathFactory factory = XPathFactoryImpl.newInstance(XPathConstants.DOM_OBJECT_MODEL); XPathEvaluator xpathCompiler = (XPathEvaluator) factory.newXPath(); XPathExpression expr = xpathCompiler.compile(xpath); NodeList childNodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET); 

感谢并问候Pratap

这不是特定于Saxon的,而是命名空间如何工作的基本部分。 在示例1和示例2中, RESPONSE元素不在命名空间中,但在案例3中,它(及其所有后代)位于http://www.abc.com/命名空间中。 使用javax.xml.xpath API,如果希望能够匹配特定命名空间中的节点,则需要定义NamespaceContext ,或者由于您使用的是XPath 2.0,因此可以使用*:localName表示法将所有节点与给定本地名称而不管其名称空间。

 /*:RESPONSE/*:HEADER/*:HITS