xsl没有为跨度生成唯一ID

时间:2017-04-21 17:48:54

标签: xslt xslt-1.0

在下面的XSL中找到以下行:

<xsl:variable name="id" select="concat('CDTableCell', position())" />
        <span id="{$id}"

我没有在转换后获得每个跨度的唯一ID。有任何想法吗?显示相同的ID。

XSL

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="/">
    <html>
      <head>
        <script>
          function mycolorcontrastfx(bgColor)
          {
          return '#000000';
          }
        </script>
      </head>
      <body>
        <h2>My CD Collection</h2>
        <xsl:apply-templates/>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="cd">
    <p>
      <xsl:apply-templates select="title"/>
      <xsl:apply-templates select="artist"/>
    </p>
  </xsl:template>

  <xsl:template match="title">
    Title:
    // Credit for help: http://stackoverflow.com/a/43546704/139698
    // As well as W3Schools
    <xsl:variable name="id" select="concat('CDTableCell', position())" />
    <span id="{$id}" style="background-color:#ff0000">
      <xsl:value-of select="."/>
    </span>
    <br />
    <script>
      var tdElem = document.getElementById('<xsl:value-of select="$id" />')
      var bgColor = tdElem.style.backgroundColor;
      var textColor = mycolorcontrastfx(bgColor);
      tdElem.style.color = textColor;
    </script>
  </xsl:template>      
</xsl:stylesheet>

XML

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="blackorwhite.xslt"?>
<catalog>
  <cd>
    <title>Empire Burlesque</title>
  </cd>
  <cd>
    <title>Hide your heart</title>
  </cd>  
</catalog>

1 个答案:

答案 0 :(得分:1)

  

我没有在转换后获得每个跨度的唯一ID。

您没有获得唯一ID,因为每个title是其父cd的第一个孩子。我建议您使用generate-id()函数代替position()(正如您最初的建议)。