Heim > Java > javaLernprogramm > Wie frage ich XML mit Namespaces mithilfe von XPath in Java ab?

Wie frage ich XML mit Namespaces mithilfe von XPath in Java ab?

Linda Hamilton
Freigeben: 2024-11-10 06:10:02
Original
412 Leute haben es durchsucht

How to Query XML with Namespaces using XPath in Java?

Abfragen von XML mit Namespaces mithilfe von XPath in Java

Beim Arbeiten mit XML, das Namespaces verwendet, können XPath-Abfragen, die Namespaces ignorieren, zu falschen Übereinstimmungen führen. In Szenarien, in denen die XML-Elemente an einen bestimmten Namespace gebunden sind, ist es wichtig, den Namespace in XPath-Ausdrücken zu berücksichtigen.

Explizite Namespace-Behandlung

Der bevorzugte Ansatz besteht darin, ein Namespace-Präfix explizit zu deklarieren Verweisen Sie in Ihren XPath-Abfragen darauf. Dies verbessert die Lesbarkeit und Wartbarkeit des Codes. Zum Beispiel:

NamespaceContext namespaceContext = new NamespaceContext();
namespaceContext.addNamespace("x", "http://schemas.example.com/x");
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
xpath.setNamespaceContext(namespaceContext);

NodeList nodes = (NodeList)xpath.evaluate("/x:workbook/x:sheets/x:sheet[1]", doc, XPathConstants.NODESET);
Nach dem Login kopieren

Generischer Elementabgleich mit Prädikaten

Alternativ ist es möglich, einen XPath-Ausdruck zu erstellen, der Elemente generisch abgleicht und Prädikate verwendet, um Ergebnisse basierend auf ihrem lokalen Namen und Namespace zu filtern -uri. Obwohl dieser Ansatz ausführlich sein mag, ermöglicht er mehr Flexibilität:

XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();

Item node = (Item)xpath.evaluate("//*[local-name()='workbook' and namespace-uri()='http://schemas.example.com/x']", doc, XPathConstants.NODE);
Nach dem Login kopieren

Abgleich lokaler Namen

Als letzten Ausweg können Sie Elemente ausschließlich anhand ihres lokalen Namens abgleichen und ignorieren der Namensraum. Dieser Ansatz birgt jedoch das Risiko, dass falsche Elemente in Szenarien gefunden werden, in denen mehrere Vokabulare mit ähnlichen lokalen Namen im XML vorhanden sind:

XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();

Item node = (Item)xpath.evaluate("//*[local-name()='workbook']", doc, XPathConstants.NODE);
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie frage ich XML mit Namespaces mithilfe von XPath in Java ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage