Come ottenere la posizione del nodo genitore nel documento completo usando xpath?Trova la posizione del nodo genitore usando xpath
dire che ho il seguente codice 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>
e ho un XSLT per convertirlo in HTML, che è la seguente (solo frammento):
<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>
Cosa devo scrivere a il posto di ???? per ottenere la posizione del tag cd genitore nel documento. Ho provato molte espressioni ma nulla sembra funzionare. Forse lo sto facendo completamente sbagliato.
<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/>
sto interpretando secondo come asse parente Scegliere di nodo corrente e poi dire la posizione del genitore del nodo corrente. Perché non funziona? Qual è il modo corretto per farlo.
FYI: Mi aspetto che il codice stampi la posizione del tag cd del tag corrente del tag corrente.
Per favore qualcuno può dirmi come fare questo.
Grazie uomo tonnellata, ora che era sciocco da parte mia non provare che. Grazie ancora :) – Harshdeep
Ancora una cosa puoi spiegare l'espressione "count (../ previous-sibling :: cd) + 1" come hai fatto per "position()". Ho usato la tua soluzione e ha funzionato benissimo, ma non sono in grado di capire perché "count (cd/previous-sibling :: ..) + 1" – Harshdeep
Ricorda che i modelli XSLT operano dalla prospettiva del nodo di contesto corrente. Nel modello in questione, il nodo di contesto è il titolo. Pertanto, 'count (cd ...)' non troverà alcun nodo perché non ci sono nodi figli di 'title' chiamato' cd' (infatti, 'title' non ha nodi figli di alcun nome). 'cd' è il genitore di' title', non suo figlio, quindi dobbiamo salire di livello. – Utkanos