2017-04-21 8 views
0

にそれを取得する方法がありますそれを私のjavascript関数に連結しますか?XSL XSL中の下に次の行を見つけ元素を含有するためのユニークなIDを生成し、JavaScriptの

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> 
     <body> 
     <h2>My CD Collection</h2> 
     <table border="1"> 
      <tr bgcolor="#9acd32"> 
      <th style="text-align:left">Title</th> 
      <th style="text-align:left">Artist</th> 
      </tr> 
      <xsl:for-each select="catalog/cd"> 
      <tr> 
       <td style="background-color: 'can_be_any_color_here'"> 
       <xsl:value-of select="title"/> 
       <script> 
        var tdElem = document.getElementById('???') <!-- Would like to get td here, if possible --> 
        var bgColor = tdElem.style.backgroundColor; 
        var textColor = mycolorcontrastfx(bgcolor); 
        tdElem.style.color = textColor; 
       </script> 
       </td> 
       <td> 
       <xsl:value-of select="artist"/> 
       </td> 
      </tr> 
      </xsl:for-each> 
     </table> 
     </body> 
    </html> 
    </xsl:template> 
</xsl:stylesheet> 

XML

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

答えて

1

あなたはXMLノード

<xsl:variable name="id" select="concat('CDTableCell', generate-id())" /> 
のためのユニークなIDを生成するために generate-idを使用することができます

それとも、この特定のケースでは、あなたは属性値テンプレートに

<td id="{$id}" style="..." /> 

を使用することができ、tdノードにIDを割り当てるには

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

を選択cdだけの位置を使用してで間に合わせますこのXSLTを試してください

<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> 
     <table border="1"> 
      <tr bgcolor="#9acd32"> 
      <th style="text-align:left">Title</th> 
      <th style="text-align:left">Artist</th> 
      </tr> 
      <xsl:for-each select="catalog/cd"> 
      <tr> 
       <xsl:variable name="id" select="concat('CDTableCell', position())" /> 
       <td id="{$id}" style="background-color:#FFFFFF"> 
       <xsl:value-of select="title"/> 
       <script> 
        var tdElem = document.getElementById('<xsl:value-of select="$id" />') 
        var bgColor = tdElem.style.backgroundColor; 
        var textColor = mycolorcontrastfx(bgColor); 
        tdElem.style.color = textColor; 
       </script> 
       </td> 
       <td> 
       <xsl:value-of select="artist"/> 
       </td> 
      </tr> 
      </xsl:for-each> 
     </table> 
     </body> 
    </html> 
    </xsl:template> 
</xsl:stylesheet> 
+0

'generate-id()'は、各引数ノードのIDを生成することを保証しません。スタイルシートの同じアプリケーションの間に任意の入力ノードに対して生成するでしょうか?その場合、生成されたIDの先頭に '' CDTableCell''を付けると、どのような目的がありますか? –

+0

私はidを意味のある名前にするために接頭辞を追加した唯一の理由は、それがどんなものかを明確にするためです。しかし理論的には、何らかの理由でXSLTに 'cds '要素の2番目の' xsl:for-each'があった場合、 'generate-id()'は同じIDを生成します。 –

関連する問題