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


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.
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.