2017-04-21 7 views
0

에 얻을 수있는 방법이 있나요 그리고 concat 내 자바 스크립트 함수로?XSL XSL에서 아래에 다음 줄을 찾기 요소를 포함에 대한 고유 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> 
     <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())" /> 
,536에 대한 고유 ID를 생성하는 generate-id을 사용할 수 있습니다

또는이 특정한 경우에, 당신은 당신이 값 템플릿 속성 사용할 수 있습니다

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

td 노드에 ID를 할당하려면 선택한 cd 단지 위치를 사용하여 할 수 있도록

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

이 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를 생성하도록 보장하지 않습니다 d 또는 스타일 시트의 동일한 응용 프로그램에서 모든 입력 노드에 대해 생성합니까? 이 경우, 생성 된 ID에''CDTableCell ''접두어를 붙이려면 어떤 목적을 염두에 두어야합니까? –

+0

ID를 의미있는 이름으로 지정하기 위해 접두사를 추가 한 유일한 이유는 그것이 무엇인지 명확하게하기 위해서입니다. 이론적으로 XSLT에 어떤 이유로'cd' 엘리먼트에 두 번째'xsl : for-each'가 있다면'generate-id()'는 동일한 ID를 생성합니다. –