Home
Über mich
Blog
Veröffentlichungen
IT-Trainings
Impressum


Automatische Generierung des XPath-Statements

Durchaus einen genaueren Blick wert ist der folgende Ansatz, der jeden einzelnen Menschen im Dokument durchläuft und zu jedem einzelnen das komplette XPath-Statement generiert. Ausgehend von jedem einzelnen Mensch-Node, wird mit ancestor-or-self::* ein Loop bis zum Rootnode durchlaufen und deren Namen (<xsl:value-of select="name()" />) ermittelt (den Rootnode zuerst).

Wenn der jeweilige Parent-Node einen zweiten (also mehrere) Childnode besitzt (<xsl:if test="../*[2]">), wird das Prädikat (z.B. [2]) dadurch generiert, daß die vorhergehenden Nodes gleichen Namens (preceding-sibling::*[name(.)=name(current())]) gezählt und um den Wert 1 addiert werden (count( ... ) + 1).

<xsl:template name="generateXPath">
 <xsl:for-each select="ancestor-or-self::*">
  <xsl:text>/</xsl:text>
  <xsl:value-of select="name()" />
  <xsl:if test="../*[2]">
   <xsl:text>[</xsl:text>
   <xsl:value-of
    select="count(preceding-sibling::*
           [name(.)=name(current())]) + 1" />
   <xsl:text>]</xsl:text>
  </xsl:if>
 </xsl:for-each>
</xsl:template>

Um eine Liste aller XPath-Statements für jedes einzelne Mensch-Element zu erhalten, können wir dieses Template aufrufen:

<xsl:template name="Pfadedemo">
 <xsl:for-each select="/Orte/Ort/Mensch">
<xsl:text>
</xsl:text>
   <xsl:call-template name="generateXPath"/>
 </xsl:for-each>
</xsl:template>

Die generierten Pfade sehen dann so aus:

/Orte/Ort[1]/Mensch[1]
/Orte/Ort[1]/Mensch[2]
/Orte/Ort[1]/Mensch[3]
/Orte/Ort[1]/Mensch[4]
/Orte/Ort[1]/Mensch[5]
/Orte/Ort[1]/Mensch[6]
/Orte/Ort[2]/Mensch[1]
/Orte/Ort[2]/Mensch[2]
/Orte/Ort[2]/Mensch[3]
/Orte/Ort[2]/Mensch[4]
/Orte/Ort[2]/Mensch[5]
/Orte/Ort[2]/Mensch[6]
/Orte/Ort[3]/Mensch[1]
/Orte/Ort[3]/Mensch[2]
/Orte/Ort[3]/Mensch[3]
/Orte/Ort[3]/Mensch[4]
/Orte/Ort[3]/Mensch[5]
/Orte/Ort[3]/Mensch[6]
/Orte/Ort[3]/Mensch[7]

qrpic/XPath_Achsen1.jpg

wg / 14. Oktober 2017




Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf (info10@wilfried-grupe.de).



Vielen Dank für Ihr Interesse an meiner Arbeit.


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

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