Aktuelle Remote-Seminare mit Durchführungsgarantie: Etwas Werbung in eigener Sache Termine: 21.09.-23.09.2020, 23.11.-25.11.2020, 07.12.-09.12.2020, 22.03.-24.03.2021, 07.06.-09.06.2021, 06.09.-08.09.2021XML Einführung und Grundlagen Termine: 20.10.2020, 13.11.2020, 10.12.2020, 25.03.2021, 10.06.2021, 09.09.2021XML - der professionelle Überblick Termine: 23.11.-26.11.2020, 29.03.-01.04.2021Einstieg in die Programmierung Termine: 14.12.-16.12.2020, 07.04.-09.04.2021XML, XSLT, XPath, XSL-FO Einführung Termine: Termin nach WunschEinstieg in C#.NET Termine: 21.09.-23.09.2020, 11.01.-13.01.2021, 26.05.-28.05.2021, 27.09.-29.09.2021VB.NET für Visual Basic-Programmierer Termine: 14.12.-16.12.2020, 08.03.-10.03.2021, 19.07.-21.07.2021, 23.08.-25.08.2021XML Grundlagen, XSL-FO, SVG, DocBook, DITA Termine: Termin nach WunschJava Grundlagen Termine: 30.11.-03.12.2020, 29.03.-01.04.2021C++ für Programmiereinsteiger Termine: 10.09.2020, 11.12.2020, 16.03.2021Neues Seminar: XProc Grundlagen Termine: 21.09.-25.09.2020, 01.03.-05.03.2021Java/JSP/HTML/JDBC/XML Komplett Termine: 07.09.-09.09.2020, 21.10.-23.10.2020, 23.11.-25.11.2020, 25.01.-27.01.2021, 12.04.-14.04.2021, 26.07.-28.07.2021Python für Programmiereinsteiger Last-Minute-Seminare, noch freie Plätze Python für Programmiereinsteiger07.09.-09.09.2020 XML Einführung und Grundlagen21.09.-23.09.2020 XML, XSLT, XPath, XSL-FO Einführung14.12.-16.12.2020

XML * XML-SCHEMA * XPATH * XSL * XSL-FO * SVG * XQUERY * XPROC * ANT * DIVERSES



XSL / Die XSLT - Struktur / xsl:key

xsl:key

xsl:key

xsl:key erlaubt die Indizierung von Nodes in einer Sequenz durch ein key-value-Paar.

siehe auch: .

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.




xsl:key

xsl:map



Vielen Dank für Ihr Interesse an meiner Arbeit.



V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/xsl_key.html