Um den XPath für jeden Knoten in einer XML-Datei zu generieren und diesen Pfad als Attribut zu jedem Knoten hinzuzufügen, habe ich eine Hilfe gefunden here. Die xslt-Datei sollte so aussehen:Generiere XPath von Knoten mit xslt 2
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" encoding="UTF-8"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:copy>
<xsl:attribute name="xpath">
<xsl:for-each select="ancestor-or-self::*">
<xsl:value-of select="concat('/',local-name())"/>
<!--Predicate is only output when needed.-->
<xsl:if
test="(preceding-sibling::*|following-sibling::*)[local-name()=local-name(current())]">
<xsl:value-of
select="concat('[',count(preceding-sibling::*[local-name()=local-name(current())])+1,']')"
/>
</xsl:if>
</xsl:for-each>
</xsl:attribute>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
Jetzt interessiert mich eine kompaktere Art und Weise mit xslt 2.0. Zum Beispiel habe ich in der folgenden xslt Datei zwei Funktionen createXPath und getXpath. Der erste gibt einen Pfad mit Knotennamen zurück und der zweite gibt die entsprechende Nummer zurück. Ist es möglich, diese auf intelligente Weise zu kombinieren?
Ich glaube nicht, dass Sie diese getestet haben. –
Ich teste sehr selten Code-Beispiele. Ich denke, es ist wichtig, dass der Leser den Code versteht und nicht nur wortwörtlich verwendet. –