In Bezug auf das xpath-Parsen von xml mit dem Standard-Namespace unter Verwendung von Saxon

Ich wollte einige Informationen im Zusammenhang mit Xpath-Parsing von Standard-Namespace mit Saxon. Ich verwende das Saxon-HE-9.5.1-3.jar, um die Funktionen von xpath 2 in meinem Code zu verwenden. Nachdem ich die sächsische Bibliothek in den Klassenpfad aufgenommen habe, tritt ein Problem beim Parsen von xpath für XML-Dokumente mit Standardnamespaces auf.

Beispiel XML in am using:

<?xml version="1.0" encoding="utf-8"?>
<RESPONSE  xmlns="http://www.abc.com/" responseCode="200">
  <HEADER>
    <HITS>100</HITS>
  </HEADER>
</RESPONSE>

Gültiges XPATH: / RESPONSE / HEADER / HITS

Im Folgenden sind die Fälle aufgeführt, in denen es funktioniert und nicht funktioniert:

"XPATH funktioniert" : Wenn kein Namespace angegeben ist
Beispiel:<RESPONSE responseCode="200">

"XPATH funktioniert" : Wenn ein Namespace mit Präfix angegeben wird
Beispiel:<RESPONSE xmlns:res="http://www.abc.com/" responseCode="200">

"XPATH funktioniert nicht" : Wenn der Standard-Namespace ohne Präfix angegeben wird Beispiel:<RESPONSE xmlns="http://www.abc.com/" responseCode="200">

Können Sie mir bitte erklären, warum Saxon keinen Namespace und keinen Standardnamespace anders behandelt? Wie löse ich den Fall, dass xpath für Dokumente mit Standardnamespace ausgeführt wird?

Unten finden Sie Teile meines Codes:

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);

Danke & Gruß Pratap

Antworten auf die Frage(1)

Ihre Antwort auf die Frage