Finden der position des parent-Knotens mit xpath
Wie man die position des parent-node in der das komplette Dokument mit xpath?
sagen, ich habe das folgende xml:
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
<cd>
<title>Hide your heart</title>
<artist>Bonnie Tyler</artist>
<country>UK</country>
<company>CBS Records</company>
<price>9.90</price>
<year>1988</year>
</cd>
</catalog>
und ich habe ein XSLT umwandeln in HTML, welches wie folgt (nur snippet):
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="cd">
<p>
<xsl:number format="1. "/><br/>
<xsl:apply-templates select="title"/>
<xsl:apply-templates select="artist"/>
</p>
</xsl:template>
<xsl:template match="title">
<xsl:number format="1" select="????" /><br/>
Title: <span style="color:#ff0000">
<xsl:value-of select="."/></span>
<br />
</xsl:template>
Was soll ich schreiben an der Stelle von ???? um die position des parent-cd-tag in das Dokument ein.
Ich habe versucht, viele Ausdrücke, aber nichts scheint zu funktionieren. Kann sein, ich mache es ganz 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 bin Dolmetschen 2. wählen Sie als aktuellen Knoten die parent-Achse und dann sagen Sie die position der übergeordnete Knoten des aktuellen Knotens. Warum es nicht funktioniert? Was ist der richtige Weg, dies zu tun.
FYI: ich erwarte, dass der code zum drucken die position der übergeordneten cd-tag des aktuellen title-tag uder Verarbeitung.
Bitte kann mir jemand sagen, wie dies zu tun.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie es laufen hier (Hinweis habe ich entfernt, die andere Zahl, die Sie wurden der Ausgabe, dient nur der Verdeutlichung).
Waren Sie auf den richtigen Linien, aber denken Sie daran, dass Prädikate werden nur verwendet, um die filter-Knoten, die keine Informationen zurückgeben. Also:
...effektiv sagt "mich finden die Eltern, dass eine position hat". Es gibt die Knoten, nicht die position selbst. Das Prädikat ist nur ein filter.
In jedem Fall gibt es Fallstricke bei der Verwendung von
position()
, und es kann verwendet werden, um wieder die position des aktuellen Kontextknotens nur - nicht einen anderen Knoten.count(cd...)
finden nicht alle Knoten, da gibt es keine Kind-Knoten vontitle
genanntcd
(in der Tattitle
hat keine Kind-Knoten von jedem Namen).cd
ist die Muttergesellschaft vontitle
ist, und nicht sein Kind, also wir gehen eine Ebene nach oben.Utkanos Antwort funktioniert gut, aber meine Erfahrung ist, dass, wenn das xml-Dokument ist groß, könnte dies zu Leistungsproblemen führen.
In diesem Szenario könnten Sie geben einfach die position der Eltern in einem param.
Ergebnis:
Erste von allen, die über XSLT-Anweisung ist syntaktisch illegal -- die
<xsl:number>
Anweisung nicht (können), haben eineselect
Attribut.Verwenden:
<xsl:number>
in der Antwort bedeutet, dass dies ist ein anklickbarer link). Um zu sehen die Ergebnisse der Verwendung dieser Anweisung kopieren und in Ihren code einfügen.