2017-04-21 3 views
0

Finden Sie die folgende Zeile in XSL Erzeugung unter:xsl nicht eine eindeutige ID für Spannweiten

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

Ich bin nicht eine eindeutige ID für jede der Spannweiten nach der Transformation zu bekommen. Irgendwelche Ideen? Zeigt die gleichen IDs an.

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> 

Antwort

1

Ich bin nicht für jede der Spannweiten nach der Transformation eine eindeutige ID zu bekommen.

Sie bekommen nicht eindeutige IDs, weil jeder title das erste Kind seiner Eltern cd ist. Ich schlage vor, Sie verwenden die generate-id() Funktion anstelle von position() (wie Sie ursprünglich empfohlen wurden).