Java Language
XML XPath-Bewertung
Suche…
Bemerkungen
XPath-Ausdrücke werden verwendet, um einen oder mehrere Knoten in einem XML-Strukturdokument zu navigieren und auszuwählen, z.
In dieser W3C-Empfehlung finden Sie eine Referenz zu dieser Sprache.
Auswerten einer NodeList in einem XML-Dokument
Gegeben das folgende XML-Dokument:
<documentation>
<tags>
<tag name="Java">
<topic name="Regular expressions">
<example>Matching groups</example>
<example>Escaping metacharacters</example>
</topic>
<topic name="Arrays">
<example>Looping over arrays</example>
<example>Converting an array to a list</example>
</topic>
</tag>
<tag name="Android">
<topic name="Building Android projects">
<example>Building an Android application using Gradle</example>
<example>Building an Android application using Maven</example>
</topic>
<topic name="Layout resources">
<example>Including layout resources</example>
<example>Supporting multiple device screens</example>
</topic>
</tag>
</tags>
</documentation>
Im Folgenden werden alle example
für das Java-Tag abgerufen (Verwenden Sie diese Methode, wenn Sie XPath nur einmal in XML auswerten. Weitere Beispiele finden Sie, wenn mehrere XPath-Aufrufe in derselben XML-Datei ausgewertet werden.):
XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xPath = xPathFactory.newXPath(); //Make new XPath
InputSource inputSource = new InputSource("path/to/xml.xml"); //Specify XML file path
NodeList javaExampleNodes = (NodeList) xPath.evaluate("/documentation/tags/tag[@name='Java']//example", inputSource, XPathConstants.NODESET); //Evaluate the XPath
...
Analysieren mehrerer XPath-Ausdrücke in einem einzigen XML
Wenn Sie dasselbe Beispiel wie " Auswerten einer NodeList" in einem XML-Dokument verwenden , können Sie mehrere XPath-Aufrufe effizient ausführen :
Gegeben das folgende XML-Dokument:
<documentation>
<tags>
<tag name="Java">
<topic name="Regular expressions">
<example>Matching groups</example>
<example>Escaping metacharacters</example>
</topic>
<topic name="Arrays">
<example>Looping over arrays</example>
<example>Converting an array to a list</example>
</topic>
</tag>
<tag name="Android">
<topic name="Building Android projects">
<example>Building an Android application using Gradle</example>
<example>Building an Android application using Maven</example>
</topic>
<topic name="Layout resources">
<example>Including layout resources</example>
<example>Supporting multiple device screens</example>
</topic>
</tag>
</tags>
</documentation>
So würden Sie XPath verwenden, um mehrere Ausdrücke in einem Dokument auszuwerten:
XPath xPath = XPathFactory.newInstance().newXPath(); //Make new XPath
DocumentBuilder builder = DocumentBuilderFactory.newInstance();
Document doc = builder.parse(new File("path/to/xml.xml")); //Specify XML file path
NodeList javaExampleNodes = (NodeList) xPath.evaluate("/documentation/tags/tag[@name='Java']//example", doc, XPathConstants.NODESET); //Evaluate the XPath
xPath.reset(); //Resets the xPath so it can be used again
NodeList androidExampleNodes = (NodeList) xPath.evaluate("/documentation/tags/tag[@name='Android']//example", doc, XPathConstants.NODESET); //Evaluate the XPath
...
Einzelnen XPath-Ausdruck mehrmals in XML analysieren
In diesem Fall möchten Sie, dass der Ausdruck vor den Auswertungen kompiliert wird, damit nicht jeder Aufruf zum evaluate
denselben Ausdruck compile
. Die einfache Syntax wäre:
XPath xPath = XPathFactory.newInstance().newXPath(); //Make new XPath
XPathExpression exp = xPath.compile("/documentation/tags/tag[@name='Java']//example");
DocumentBuilder builder = DocumentBuilderFactory.newInstance();
Document doc = builder.parse(new File("path/to/xml.xml")); //Specify XML file path
NodeList javaExampleNodes = (NodeList) exp.evaluate(doc, XPathConstants.NODESET); //Evaluate the XPath from the already-compiled expression
NodeList javaExampleNodes2 = (NodeList) exp.evaluate(doc, XPathConstants.NODESET); //Do it again
Insgesamt sind zwei Aufrufe von XPathExpression.evaluate()
wesentlich effizienter als zwei Aufrufe von XPath.evaluate()
.