XPath 3.0, XPath 2.0, XPath 1.0 / XPath-Achsen / preceding::*

preceding::*

preceding::*

➪ Mit preceding::* erhalten Sie Vorgänger-Nodes des aktuellen Knotens. Analog dem following::* erhalten Sie bei preceding::* sämtliche Nodes und deren Childnodes, die dem adressierten Node /Orte/Ort[2]/Mensch[2] vorausgehen.

pic/XPath_preceding.jpg


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

Je nach Umfang des Gesamtdokuments und nach Adressierung des aktuellen Nodes kann der Output sehr umfangreich sein. Erfasst wird jeder vorhergehende Node mit all seinen Childnodes, unabhängig von dem jeweiligen Namen. Möchten Sie dagegen nur die vorhergehenden Nodes eines bestimmten Namens ansprechen (also z.B. Mensch), sämtliche anderen Nodes jedoch ignorieren, so lautet der Ausdruck:


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

Dann erhalten Sie auch nur die erwähnten Nodes Mensch ohne deren Parent- oder Childnodes. Das Ergebnis erinnert an preceding-sibling::Mensch, ist aber doch anders.

pic/XPath_preceding_Mensch.png

Weist das XML-Dokument Namespaces auf, so ist es ausreichend, den Namespace-Präfix mit einzubinden: preceding::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[2]
                             /ns3:Mensch[2]
                             /preceding::ns3:Mensch">
          <M>
              <xsl:value-of select="d:vorname"/>
          </M>
        </xsl:for-each>
      </ergebnis>
    </xsl:template>
</xsl:stylesheet>

Siehe auch

wg / 15. September 2018



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