Cara mendapatkan penghitung di dalam xsl: for-each loop yang akan mencerminkan jumlah elemen saat ini yang diproses.
Misalnya XML sumber saya
<books>
<book>
<title>The Unbearable Lightness of Being </title>
</book>
<book>
<title>Narcissus and Goldmund</title>
</book>
<book>
<title>Choke</title>
</book>
</books>
Yang ingin saya dapatkan adalah:
<newBooks>
<newBook>
<countNo>1</countNo>
<title>The Unbearable Lightness of Being </title>
</newBook>
<newBook>
<countNo>2</countNo>
<title>Narcissus and Goldmund</title>
</newBook>
<newBook>
<countNo>3</countNo>
<title>Choke</title>
</newBook>
</newBooks>
XSLT yang akan dimodifikasi:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<newBooks>
<xsl:for-each select="books/book">
<newBook>
<countNo>???</countNo>
<title>
<xsl:value-of select="title"/>
</title>
</newBook>
</xsl:for-each>
</newBooks>
</xsl:template>
</xsl:stylesheet>
Jadi pertanyaannya adalah apa yang harus menggantikan ???. Apakah ada kata kunci standar atau apakah saya hanya harus mendeklarasikan variabel dan menambahkannya di dalam loop?
Karena pertanyaannya cukup panjang, saya mungkin mengharapkan satu baris atau satu kata jawaban :)
xsl:if
di dalamxsl:for-each
? Apa itu "counter yang tepat"? Bisakah Anda menunjukkan beberapa sumber?Coba masukkan
<xsl:number format="1. "/><xsl:value-of select="."/><xsl:text>
sebagai ganti ???.Perhatikan "1." - ini adalah format angka. Info lebih lanjut: di sini
sumber
<xsl:number format="1. " value="position()"/>
Mencoba:
<xsl:value-of select="count(preceding-sibling::*) + 1" />
Edit - mengalami pembekuan otak di sana, posisi () lebih mudah!
sumber
Anda juga bisa menjalankan pernyataan bersyarat di Postion () yang bisa sangat membantu dalam banyak skenario.
untuk mis.
<xsl:if test="(position( )) = 1"> //Show header only once </xsl:if>
sumber
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:template match="/"> <newBooks> <xsl:for-each select="books/book"> <newBook> <countNo><xsl:value-of select="position()"/></countNo> <title> <xsl:value-of select="title"/> </title> </newBook> </xsl:for-each> </newBooks> </xsl:template> </xsl:stylesheet>
sumber