XPath Abfrage
Der Task XPath Abfrage ist ein spezialisiertes Werkzeug zur Datenextraktion aus einem XML-Dokument. Er nimmt einen XML-Text von einem vorhergehenden Task entgegen und wendet einen XPath (XML Path Language)-Ausdruck an, um spezifische Knoten oder Werte innerhalb dieses Dokuments auszuwählen.
Er ist ein grundlegender Task zur Verarbeitung von SOAP-Aufrufrückmeldungen, zur Analyse von XML-Konfigurationsdateien oder zur Extraktion von Informationen aus beliebigen strukturierten Daten im XML-Format.
Konfiguration
Die Konfiguration konzentriert sich auf die Definition des Suchausdrucks und die optionale Verwaltung von Namespaces.
- XML-Inhalt: Der XML-Dokumentinhalt, aus dem Daten extrahiert werden sollen.
- XPath-Ausdruck: Das Herzstück des Tasks. In dieses Feld wird der XPath-Ausdruck eingegeben, der definiert, welche Elemente aus dem XML-Dokument ausgewählt werden sollen.
- Namespaces (optional): Dieser Abschnitt ist bei der Verarbeitung von XML-Dokumenten, die Namespaces verwenden, die über Attribute wie
xmlnsoderxmlns:prefixdefiniert sind, unerlässlich.
Anwendungsbeispiel (Ohne Namespace)
Betrachten wir eine einfache XML-Datei, wie die einer Bibliothek, die keine Namespaces verwendet:
<?xml version="1.0" encoding="UTF-8"?>
<libreria>
<libro id="1">
<titolo>Il Signore degli Anelli</titolo>
<autore>J.R.R. Tolkien</autore>
<anno>1954</anno>
</libro>
<libro id="2">
<titolo>1984</titolo>
<autore>George Orwell</autore>
<anno>1949</anno>
</libro>
<libro id="3">
<titolo>Il Nome della Rosa</titolo>
<autore>Umberto Eco</autore>
<anno>1980</anno>
</libro>
</libreria>
Ziel: Nur die Titel der Bücher extrahieren, die nach 1950 veröffentlicht wurden.
Task-Konfiguration:
- XPath-Ausdruck: /libreria/libro[anno > 1950]/titolo
- Namespaces: Dieser Abschnitt wird leer gelassen.
Erwartetes Ergebnis: Der Parameter result des Tasks enthält ein neues XML-Dokument mit den beiden Titeln, die die Bedingung erfüllen:
<titolo>Il Signore degli Anelli</titolo>
<titolo>Il Nome della Rosa</titolo>
Anwendungsbeispiel (Mit Namespace)
Während das vorherige Beispiel für einfache XMLs gültig ist, kann dieser Task auch XML verarbeiten, bei denen die Elemente einem vordefinierten Namespace angehören, was eine manuelle Zuordnung eines Präfixes zu dem Namespace erfordert, um XPath korrekt verwenden zu können.
Betrachten wir eine Version des XML, die einen Namespace verwendet:
<libreria xmlns="http://example.com/libri">
<libro>
<anno>1321</anno>
<titolo>La Divina Commedia</titolo>
<autore>Dante Alighieri</autore>
</libro>
<libro>
<anno>1600</anno>
<titolo>Amleto</titolo>
<autore>William Shakespeare</autore>
</libro>
<libro>
<anno>1980</anno>
<titolo>Il Nome della Rosa</titolo>
<autore>Umberto Eco</autore>
</libro>
</libreria>
In diesem Fall würde ein XPath-Ausdruck wie /libreria/libro/titolo fehlschlagen, da die Knoten nicht "libreria" oder "libro" heißen, sondern durch den Namespace http://example.com/libri qualifiziert sind.
Verwendung von Präfixen und Namespaces
Wenn wir nur den Titel des nach 1950 veröffentlichten Buches aus diesem XML mit Namespace extrahieren möchten, müssen wir dem Task zuerst "beibringen", was das Präfix bedeutet, das wir verwenden werden (z. B. ns).
Im Abschnitt Namespaces fügen wir eine Zeile hinzu:
| Prefix | Namespace |
|---|---|
| ns | http://example.com/libri |
Nun können wir den XPath-Ausdruck mit dem registrierten Präfix schreiben:
//ns:libro[ns:anno > 1950]/ns:titolo
Erwartetes Ergebnis
Der Parameter result des Tasks enthält ein neues XML-Dokument mit nur dem Titel, der die Bedingung erfüllt, wobei sein ursprünglicher Namespace erhalten bleibt:
<ns:titolo xmlns:ns="http://example.com/libri">Il Nome della Rosa</ns:titolo>
Wenn das Präfix und der Namespace nicht festgelegt werden, enthält der Parameter result stattdessen eine Fehlermeldung: Warning: DOMXPath::query(): Undefined namespace prefix
Anmerkung
Wenn XML-Elemente einen expliziten Präfix haben:
<ns1:libreria xmlns:ns1="http://example.com/libri"><ns1:libro><ns1:anno>1980</ns1:anno><ns1:titolo>Il Nome della Rosa</ns1:titolo></ns1:libro></ns1:libreria>
Es ist nicht notwendig, einen Präfix manuell für den Namespace zuzuordnen. XPath kann stattdessen direkt den bereits vorhandenen Präfix (ns1) verwenden, um Elemente zu lokalisieren, was das Schreiben von Abfragen im Vergleich zu vordefinierten Namespaces ohne Präfix vereinfacht.
Ausgabe-Parameter
Der Task exponiert einen einzigen Ausgabe-Parameter Hauptparameter:
- result: Enthält das Ergebnis der XPath-Abfrage oder eine Fehlermeldung.
- Wenn die Abfrage einen einzelnen einfachen Textwert zurückgibt (z. B. den Inhalt eines Tags
<titolo>), enthältresultdiesen Wert direkt als String. - Wenn die Abfrage ein oder mehrere XML-Knoten (komplexe Strukturen) zurückgibt, enthält
resultein neues, gut formatiertes XML-Dokument, das nur die gefundenen Knoten enthält.
- Wenn die Abfrage einen einzelnen einfachen Textwert zurückgibt (z. B. den Inhalt eines Tags
- resultJson: stellt das Ergebnis der Task-Ausführung im JSON-Format dar und enthält allgemeine Informationen, Konfigurationen und Details zur Ausführung.