Heim  >  Artikel  >  Java  >  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
Linda HamiltonOriginal
2024-11-10 06:10:02374Durchsuche

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

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

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

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!

Stellungnahme:
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