Pertanyaan Cara melewatkan variabel antara dua template di XSLT


Cara melewatkan variabel antara dua template di XSLT.

Saya tidak dapat menggunakan variabel global karena nilai variabel tergantung pada node saat ini sedang dalam evaluasi.

Katakanlah saya memiliki XSLT semacam:

<xsl:template match="product">
<xsl:variable name="pr-pos" select="count(./preceding-sibling::product)+1"/>
..
..
..
<xsl:apply-templates select="countries/country"/>
</xsl:template>

<xsl:template match="countries/country">
<tr id="country-id">
  <td><a href="#" class="action" id="{concat('a-',$pr-pos)}">+</a></td>
..
..

Ini memberikan kesalahan karena $ pr-pos tidak dapat diakses di template kedua.

Bagaimana cara saya mengirimkan nilai variabel pr-pos ke template lain? Bagaimana saya bisa melakukan ini?


5
2018-06-30 19:53


asal


Jawaban:


<xsl:template match="product">
    <xsl:variable name="pr-pos" select="count(./preceding-sibling::product)+1"/>
    ..
    ..
    ..
    <xsl:apply-templates select="countries/country">
       <xsl:with-param name="pr-pos" select="$pr-pos" />
    </xsl:apply-templates>
</xsl:template>

<xsl:template match="countries/country">
  <xsl:param name="pr-pos" />
    <tr id="country-id">
      <td><a href="#" class="action" id="{concat('a-',$pr-pos)}">+</a></td>
      ..
      ..

10
2018-06-30 20:14