Optionaler XPath-Filter

Hier nochmal unsere Beispieldatei.


<?xml version="1.0" encoding="ISO-8859-1"?>
<invoice date="07.03.13" ref="R-0001">
<header>
<customer>Lobster</customer>
<address>
<name>Lobster GmbH</name>
<street>Münchner Str. 15a</street>
<zip>82319</zip>
<city>Starnberg</city>
</address>
</header>
<positions>
<item type="1" desc="billing">
<pos>1</pos>
<article id="A-001" name="Artikel 1" price="1050" amount="1" />
<note>Vorsicht - Glas!</note>
</item>
<item type="0" desc="return">
<pos>2</pos>
<article id="A-002" name="Artikel 2" price="920" amount="2" />
</item>
<item type="1" desc="billing">
<pos>3</pos>
<article id="A-003" name="Artikel 3" price="90" amount="3" />
<note>Siehe Zählerstand</note>
</item>
</positions>
<footer>
<note code="001">Vollständig</note>
</footer>
</invoice>


Nehmen wir an, wir wollen nur item-Elemente, deren Attribut type den Wert 1 hat, in den Zielbaum übernehmen. Statt nun über alle item-Vorkommen zu iterieren (durch die Pfadangabe gegeben), können wir in V4 einen optionalen, zusätzlichen XPath-Ausdruck hinterlegen (Zielstruktur-Knoten item).

images/download/attachments/73599436/859.png images/download/attachments/73599436/860.png


Mit [@type='1'] wird die Pfadangabe item auf alle Elemente mit Attribut type='1' beschränkt. Statt im ersten Datenblatt zweimal item zu betreten, geschieht dies nun nur einmal, da das zweite item den Attribut-Wert 0 besitzt. Der Unterschied hinsichtlich Performance und Speicherbedarf kann sehr groß sein, wenn viele Elemente ausgefiltert werden. Hinweis: Intern liest der Parser nicht einmal Elemente ein, die mit einem XPath-Ausdruck ausgeschlossen wurden, es handelt sich also nicht nur um eine Leistungsverbesserung in der Zielstruktur. Allerdings wird Ihnen in einem Mapping-Test die volle Quellstruktur angezeigt.

Satzarterkennungen


Den selben Effekt, der oben beschrieben ist, kann man durch die Verwendung von XPath-Ausdrücken in den Satzarterkennungen erreichen. Dort ist die Syntax aber leicht anders. Hinweis: Wenn Sie Elemente auf diese Art ausschließen, werden sie in einem Mapping-Test gar nicht erst angezeigt.


images/download/attachments/73599436/599.png


Der Name des Elements item muss hier als Präfix im XPath-Ausdruck verwendet werden (kommt bei der Anwendung in der Zielstruktur ja aus der Eigenschaft Pfad).

Um es einfacher auszudrücken, hätten normalerweise in der Satzarterkennung den Wert item. Und nun hängen Sie Ihren XPath-Ausdruck zur Einschränkung dahinter.

XPath-Syntax


Auf die XPath-Syntax wird hier im Detail nicht eingegangen. Sie finden dazu im Netz aber viele Beispiele.