C#.NET * C++ * JAVASCRIPT * PYTHON * DIVERSES
XML * XML-SCHEMA * XPATH * XSL * XSL-FO * SVG * XQUERY * XPROC * ANT



XPath / XPath-Achsen / ancestor::*

ancestor::*

ancestor::*

ancestor::* gibt die Liste aller vorhergehender Nodes aus, aber ohne den aktuellen Mensch-Node.

Auf dieser Seite:

pic/XPath_ancestor.jpg


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

Das Resultat lautet dann:


<ergebnis>
  <e nr="1">/Orte</e>
  <e nr="2">/Orte/Ort[1]</e>
</ergebnis>

Evtl. etwas mißverständlicher Zugriff

Siehe auch

Freilich erscheint der Zugriff etwas mißverständlich. Für folgenden XML Import:


<?xml version="1.0" encoding="utf-8" ?>
<A0>
  <A1>
    <A2>
      <A3>
        <A4>
          <A5>
            <A6>
              <A7>
                <A8>
                  <A9/>
                </A8>
              </A7>
            </A6>              
          </A5>
        </A4>
      </A3>
    </A2>
  </A1>
</A0>

... und diesem XSLT-Quellcode:


<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="/A0/A1/A2/A3">
    <ergebnis>
      <xsl:for-each select="./ancestor::*">
        <Element>
          <xsl:value-of select="name()"/>
        </Element>
      </xsl:for-each>
    </ergebnis>
    </xsl:template>
</xsl:stylesheet>

... lautet das Ergebnis:


<?xml version="1.0" encoding="UTF-8"?>
<ergebnis>
   <Element>A0</Element>
   <Element>A1</Element>
   <Element>A2</Element>
</ergebnis>

Ergebnis bei erstem Wert

Bei demselben XML-Input und folgendem XSLT-Code


<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="/A0/A1/A2/A3">
    <ergebnis>
      <xsl:for-each select="./ancestor::*[1]">
        <Element>
          <xsl:value-of select="name()"/>
        </Element>
      </xsl:for-each>
    </ergebnis>
    </xsl:template>
</xsl:stylesheet>

... lautet das Ergebnis dagegen (also nur der direkt vorhergehende Wert):


<?xml version="1.0" encoding="UTF-8"?>
<ergebnis>
   <Element>A2</Element>
</ergebnis>

wg / 14. März 2021



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