Jak uzyskać położenie węzła nadrzędnego w całym dokumencie za pomocą xpath?Znajdź pozycję węzła nadrzędnego, używając xpath
że mam następujące 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>
i mam XSLT do przekształcenia go w HTML, który jest następujący (tylko urywek):
<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>
Co powinienem napisać w miejsce ???? aby uzyskać pozycję macierzystego znacznika cd w dokumencie. Próbowałem wielu wyrażeń, ale nic nie działa. Być może robię to zupełnie źle.
<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/>
ja interpretacji 2nd jako oś dominujących wybierz Aktualna węzła, a następnie powiedzieć pozycję rodzica bieżącego węzła. Dlaczego to nie działa? Jaki jest właściwy sposób, aby to zrobić.
FYI: Oczekuję, że kod wydrukuje pozycję nadrzędnego znacznika cd bieżącego przetwarzania tagu tytułu.
Czy ktoś może mi powiedzieć, jak to zrobić.
Dzięki ton mężczyzna, teraz to było głupie z mojej strony, aby nie spróbować. Jeszcze raz dziękuję :) – Harshdeep
Jeszcze jedno, czy możesz wyjaśnić wyrażenie "count (../ previous-sibling :: cd) + 1" jak w przypadku "position()". Użyłem twojego rozwiązania i działało świetnie, ale nie jestem w stanie zrozumieć, dlaczego nie "count (cd/previous-sibling :: ..) + 1" – Harshdeep
Pamiętaj, że szablony XSLT działają z perspektywy bieżącego węzła kontekstu. W danym szablonie węzeł kontekstu jest tytułem. Dlatego 'count (cd ...)' nie znajdzie żadnych węzłów, ponieważ nie ma węzłów potomnych 'title' zwanych' cd' (w rzeczy samej 'title' nie ma żadnych węzłów potomnych o żadnej nazwie). 'cd' jest rodzicem' title', a nie jego dzieckiem, dlatego musimy podnieść poziom. – Utkanos