Heim >Java >javaLernprogramm >Wie gehe ich mit XML-Namespaces in Java XPath-Abfragen um?

Wie gehe ich mit XML-Namespaces in Java XPath-Abfragen um?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-11 18:24:03362Durchsuche

How to Handle XML Namespaces in Java XPath Queries?

XML-Namespace-Handhabung in Java-XPath-Abfragen

In Java können Namespaces beim Abfragen von XML mit XPath eine Herausforderung darstellen. Wenn XML keine Namespaces enthält, können XPath-Abfragen unkompliziert sein, aber das Vorhandensein von Namespaces bringt Komplexität mit sich.

Fall 1: XML ohne Namespaces

Für XML ohne Namespaces: XPath Abfragen verwenden den Standard-Namespace, der praktisch kein Namespace ist. In diesem Fall können Abfragen wie „/workbook/sheets/sheet[1]“ problemlos Elemente abrufen.

Fall 2: XML mit Namespaces

Jedoch XML mit Namespaces wie die folgenden erhöhen die Komplexität:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
  <sheets>
    <sheet name="Sheet1" sheetId="1" r:id="rId1"/>
  </sheets>
</workbook>

In solchen Fällen der XPath-Ausdruck „/workbook/sheets/sheet[1]“ schlägt fehl, da die Elemente an den Namespace „http://schemas.openxmlformats.org/spreadsheetml/2006/main“ gebunden sind.

Lösungen:

  1. Namespace-Registrierung: Die bevorzugte Methode besteht darin, den Namespace bei einem zu registrieren Präfix und verwenden Sie es in der XPath-Abfrage, um es einfacher zu lesen und zu verwalten.
  2. Generischer Match mit Prädikat: Ohne Namespace-Registrierung kann ein komplexerer XPath-Ausdruck verwendet werden:
/*[local-name()='workbook' and namespace-uri()='http://schemas.openxmlformats.org/spreadsheetml/2006/main']
  /*[local-name()='sheets' and namespace-uri()='http://schemas.openxmlformats.org/spreadsheetml/2006/main']
  /*[local-name()='sheet' and namespace-uri()='http://schemas.openxmlformats.org/spreadsheetml/2006/main'][1]
  1. Lokale Namensübereinstimmung: Eine weniger bevorzugte Option ist die nur lokale Übereinstimmung Name des Elements, Ignorieren des Namensraums, aber es besteht die Gefahr, dass falsche Elemente ausgewählt werden, wenn gemischte Vokabulare vorhanden sind.

Das obige ist der detaillierte Inhalt vonWie gehe ich mit XML-Namespaces in Java XPath-Abfragen um?. 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