XML | XML-Schema | XPath | XSL-T | XSL-FO | XQuery | XProc | SVG |
XSL-T / Die XSLT - Struktur / xsl:key
![]() |
![]() |
➪ xsl:key erlaubt die Indizierung von Nodes in einer Sequenz durch ein key-value-Paar.
siehe auch: xsl:key.
Das Attribut name deklariert den Namen des Schlüssels, match die Nodesequenz, use den Schlüsselwert.
Nehmen Sie dieses Beispieldokument:
<ROOT>
<Einwohner>
<id>10</id>
<name>Ruhelos</name>
<vorname>Rita</vorname>
<strasse>Hinundweg</strasse>
</Einwohner>
<Einwohner>
<id>3</id>
<name>Sorglos</name>
<vorname>Siggi</vorname>
<strasse>Nixwieweg</strasse>
</Einwohner>
</ROOT>
Nun setzen Sie einen xsl:key kPersid auf die id jedes Einwohner-Elements.
<xsl:key
name="kPersid"
match="Einwohner"
use="id"/>
Den deklarierten xsl:key kPersid können Sie dazu nutzen, ein Einwohner-Element präzise zu adressieren.
<xsl:template match="/">
<Ergebnis>
<xsl:for-each select="key('kPersid', '3')">
<p>
<ID><xsl:value-of select="id"/></ID>
<NN><xsl:value-of select="name"/></NN>
<VN><xsl:value-of select="vorname"/></VN>
</p>
</xsl:for-each>
</Ergebnis>
</xsl:template>
Im vorliegenden Fall ist das nur ein einzelnes Element:
<Ergebnis>
<p>
<ID>3</ID>
<NN>Sorglos</NN>
<VN>Siggi</VN>
</p>
</Ergebnis>
Ändern Sie den Key (nunmehr kPersstr) so, dass mehrere Items angesprochen werden können. Das ist der Fall, wenn mehrere Einwohner-Elemente denselben Childnode strasse haben.
<xsl:key
name="kPersstr"
match="Einwohner"
use="strasse"/>
Seit XSLT 2.0 können Sie statt des use-Attributs auch eine Sequenz generieren.
<xsl:key
name="kPersstr"
match="Einwohner">
<xsl:sequence
select="strasse"/>
</xsl:key>
Ändern Sie auch die Auswertung in der Weise, dass Sie mehrere Keys auswerten können:
<xsl:template match="/">
<Ergebnis>
<xsl:for-each
select="key('kPersstr',
('Hinundweg', 'Nixwieweg'))">
<p>
<ID><xsl:value-of select="id"/></ID>
<NN><xsl:value-of select="name"/></NN>
<VN><xsl:value-of select="vorname"/></VN>
<WO><xsl:value-of select="strasse"/></WO>
</p>
</xsl:for-each>
</Ergebnis>
</xsl:template>
so finden Sie dieses Ergebnis:
<Ergebnis>
<p>
<ID>10</ID>
<NN>Ruhelos</NN>
<VN>Rita</VN>
<WO>Hinundweg</WO>
</p>
<p>
<ID>3</ID>
<NN>Sorglos</NN>
<VN>Siggi</VN>
<WO>Nixwieweg</WO>
</p>
</Ergebnis>
Dasselbe Resultat erhalten Sie auch durch "klassisches" XPath:
<xsl:for-each
select="//Einwohner
[strasse=('Hinundweg', 'Nixwieweg')]">
...
</xsl:for-each>
wg / 10. August 2020
Fragen? Anmerkungen? Tipps?
Bitte nehmen Sie Kontakt zu mir auf.
V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn
☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de