Wie bekomme ich die Position des Elternknotens im gesamten Dokument mit xpath?
sage ich habe die folgende xml:
%Vor%und ich habe ein XSLT, um es in HTML zu konvertieren, was wie folgt ist (nur Schnipsel):
%Vor%Was soll ich am Ort von ???? schreiben? um die Position des Eltern-CD-Tags im Dokument zu erhalten. Ich habe viele Ausdrücke ausprobiert, aber nichts scheint zu funktionieren. Vielleicht mache ich es total falsch.
<xsl:number format="1" select="catalog/cd/preceding-sibling::..[position()]" />
<xsl:number format="1" select="./parent::..[position()]" /><br/>
<xsl:value-of select="count(cd/preceding-sibling::*)+1" /><br/>
Ich interpretiere 2. als die aktuelle Achse des aktuellen Knotens und erkläre dann die Position des Elternteils des aktuellen Knotens. Warum funktioniert es nicht? Was ist der richtige Weg, dies zu tun?
Zu Ihrer Information: Ich erwarte, dass der Code die Position des übergeordneten CD-Tags des aktuellen title-Tags für die Verarbeitung ausgibt.
Bitte kann mir jemand sagen, wie man das macht.
Sie können es hier ausführen (Hinweis: Ich habe die andere Zahl entfernt, die Sie ausgegeben haben, nur aus Gründen der Klarheit.)
Sie waren auf der richtigen Linie, aber denken Sie daran, dass Prädikate nur dazu verwendet werden, Knoten zu filtern, nicht um Informationen zurückzugeben. Also:
%Vor%... sagt effektiv "Finde mich den Elternteil, der eine Position hat". Es gibt den Knoten zurück, nicht die Position selbst. Das Prädikat ist nur ein Filter.
In jedem Fall gibt es Tücken bei der Verwendung von position()
, und es kann verwendet werden, um die Position des aktuellen Context-Knotens nur zurückzugeben - kein anderer Knoten.
Die Antwort von Utkanos funktioniert gut, aber ich habe die Erfahrung gemacht, dass bei einem großen xml-Dokument dies zu Leistungsproblemen führen kann.
In diesem Szenario könnten Sie einfach die Position des Elternteils in einem Parameter übergeben.
%Vor%Ergebnis:
%Vor%%Vor%Was soll ich am Ort von ???? schreiben? um die Position des Elternteils zu bekommen CD-Tag im Dokument.
Zuallererst ist der obige XSLT-Befehl syntaktisch illegal - die <xsl:number>
-Anweisung hat (% s) kein select
-Attribut .
Verwenden Sie :
%Vor%