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



XPath / XPath-Achsen / following::*

following::*

following::*

➪ Mit following::* erhalten Sie Folge-Nodes des aktuellen Knotens.

Arbeiten Sie stattdessen mit following::*, so erhalten Sie nicht nur die folgenden Mensch-Nodes samt derer Childnodes, sondern auch der folgenden Nodes.

pic/XPath_following.jpg


 <xsl:template match="/">
  <ergebnis>
   <xsl:for-each 
        select="/Orte/Ort[1]/Mensch[2]
                /following::*">
    <e nr="{position()}">
     <xsl:call-template name="generateXPath"/>
    </e>
   </xsl:for-each>
  </ergebnis>
 </xsl:template>

Je nach dem XML-Input-Dokument und dem jeweils adressierten Start-Node kann die Ergebnisliste sehr umfangreich werden, weil nicht nur die folgenden Nodes abgearbeitet werden, sondern auch deren Parent- und Childnodes, unabhängig von ihrem Namen.

Möchten Sie in der Ergebnisliste nur Elemente mit einem bestimmten Node-Namen haben, so lautet der Aufruf:


<xsl:for-each 
     select="/Orte/Ort[1]/Mensch[2]
     /following::Mensch">
...
</xsl:for-each>

Das Ergebnis sieht ähnlich dem following-sibling::* aus, unterscheidet sich aber darin, dass following-sibling::* nur jene Nodes in Betracht zieht, die denselben Parent-Node haben wie das adressierte Start-Element. following::Mensch bezieht auch jene "Mensch"-Nodes mit ein, die einen anderen Parent-Node haben.

pic/XPath_following_Mensch.png

Eine häufige Aufgabenstellung ist die Suche nach Elementen, die bestimmte Eigenschaften haben. Zum Beispiel geht es darum, in der Liste der folgenden Nodes den vorname jenes Mensch-Elements zu erhalten, dessen Childnode name einen gesuchten Inhalt hat. Hier kommen Prädikate ins Spiel.


 <xsl:template match="/">
  <ergebnis>
   <xsl:for-each 
        select="/Orte/Ort[1]/Mensch[2]
                /following::Mensch[name='Sinnlos']">
    <M>
     <xsl:value-of select="vorname"/>
    </M>
   </xsl:for-each>
  </ergebnis>
 </xsl:template>

Das gefundene Ergebnis lautet hier:


<ergebnis>
   <M>Simone</M>
</ergebnis>

Möchten Sie zudem wissen, an welcher Stelle sich dieses Element befindet, so verwenden Sie einen anderen Ansatz:


 <xsl:template match="/">
  <ergebnis>
   <xsl:for-each 
        select="/Orte/Ort[1]/Mensch[2]
                /following::Mensch">
    <xsl:if test="name='Sinnlos'">
     <M Position="{position()}">
      <xsl:value-of select="vorname"/>
     </M>
    </xsl:if>
   </xsl:for-each>
  </ergebnis>
 </xsl:template>

Hier sehen Sie, dass sich das gesuchte Element an der 7. Stelle nach dem ursprünglich adressierten Node befindet.


<ergebnis>
   <M Position="7">Simone</M>
</ergebnis>

Weist das XML-Dokument Namespaces auf, so genügt es, den Namespace-Präfix in following einzuarbeiten: following::ns3:Mensch.


<xsl:stylesheet 
    xmlns:d="www.wilfried-grupe.de/Beispiele/2018" 
    xmlns:ns1="www.wilfried-grupe.de/Orte/2018"
    xmlns:ns2="www.wilfried-grupe.de/Ort" 
    xmlns:ns3="www.wilfried-grupe.de/Mensch"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="2.0">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="/">
     <ergebnis>
        <xsl:for-each 
             select="/ns1:Orte/ns2:Ort[1]
                              /ns3:Mensch[2]
                              /following::ns3:Mensch">
            <M>
                <xsl:value-of select="d:vorname"/>
            </M>
        </xsl:for-each>
     </ergebnis>
    </xsl:template>
</xsl:stylesheet>

Siehe auch

wg / 7. Mai 2020



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.






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/XPath_Achsen3.html