Cách lấy vị trí của nút cha trong tài liệu hoàn chỉnh bằng cách sử dụng xpath?Tìm vị trí của nút cha bằng cách sử dụng xpath
nói rằng tôi có xml sau:
<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>
và tôi có một XSLT để chuyển đổi nó sang HTML, đó là như sau (chỉ đoạn mã):
<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>
tôi nên viết gì vào nơi ???? để có được vị trí của thẻ cd cha trong tài liệu. Tôi đã thử nhiều cách diễn đạt nhưng dường như không có gì hiệu quả. Có thể tôi đang làm điều đó hoàn toàn sai.
<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/>
Tôi giải thích thứ 2 là trục mẹ chọn hiện tại nút và sau đó nói với các vị trí của công ty mẹ của nút hiện hành. Tại sao nó không làm việc? Cách chính xác để làm điều này là gì.
FYI: Tôi hy vọng mã sẽ in vị trí của thẻ cd gốc của thẻ tiêu đề hiện tại xử lý uder.
Xin vui lòng ai đó có thể cho tôi biết cách thực hiện việc này.
Cảm ơn một người đàn ông tấn, bây giờ nó là ngớ ngẩn của tôi không phải cố gắng đó. Cảm ơn lần nữa :) – Harshdeep
Chỉ một điều nữa bạn có thể giải thích cụm từ "count (../ preceding-sibling :: cd) + 1" như bạn đã làm cho "position()". Tôi đã sử dụng giải pháp của bạn và nó hoạt động tốt nhưng tôi không thể hiểu tại sao không "đếm (cd/preceding-sibling :: ..) + 1" – Harshdeep
Hãy nhớ rằng các mẫu XSLT hoạt động từ phối cảnh của nút ngữ cảnh hiện tại. Trong khuôn mẫu có liên quan, nút ngữ cảnh là tiêu đề. Do đó, 'count (cd ...)' sẽ không tìm thấy bất kỳ nút nào vì không có nút con nào của 'title' được gọi là' cd' (thực sự, 'title' không có nút con của bất kỳ tên nào). 'cd' là cha của' title', không phải là con của nó, do đó chúng ta phải tăng cấp độ. – Utkanos