2017-04-11 1 views
0

특정 순서로 속성을 가져와 특정 이름 집합에 루프를 사용하고 있습니다. @ $ attribute 또는 @와 같은 것을하고 싶습니다. 그러나 다만 사용. 내가 원하는 것 인 속성의 가치가 아니라 이름 자체를 제공합니다.변수를 속성 이름으로 사용하십시오.

기본적으로 각 행에 대해 "제목"및 "아티스트"라고 말하면서 실제 제목과 아티스트를 원합니다.

hello.xml :

<?xml version="1.0" encoding="UTF-8"?> 
<results> 
    <r title="Empire Burlesque" artist="Bob Dylan" /> 
    <r title="Hide your heart" artist="Bonnie Tyler" /> 
    <r title="Greatest Hits" artist="Dolly Parton" /> 
</results> 

hello.xsl :

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template name="boxNames"> <!-- not used as template --> 
    <name>title</name> 
    <name>artist</name> 
</xsl:template> 
<xsl:template match="/"> 
<xsl:variable name="boxNames" select="document('')/xsl:stylesheet/xsl:template[@name='boxNames']/name" /> 
<html> 
<body> 
    <h2>My CD Collection</h2> 
    <table border="1"> 
    <tr bgcolor="#9acd32"> 
     <xsl:for-each select="$boxNames"> 
     <th style="text-align:left"><xsl:value-of select="." /></th> 
     </xsl:for-each> 
    </tr> 
    <xsl:for-each select="results/r"> 
    <tr> 
     <xsl:for-each select="$boxNames"> 
     <td><xsl:value-of select="."/></td> 
     </xsl:for-each> 
    </tr> 
    </xsl:for-each> 
    </table> 
</body> 
</html> 
</xsl:template> 
</xsl:stylesheet> 

출력 : 당신은 단순히 순서를 하드 코딩 할 수없는 이유

<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> 
     <tr> 
      <td>title</td> 
      <td>artist</td> 
     </tr> 
     <tr> 
      <td>title</td> 
      <td>artist</td> 
     </tr> 
     <tr> 
      <td>title</td> 
      <td>artist</td> 
     </tr> 
     </table> 
    </body> 
</html>Execution time: 88.941623ms 

답변

0

내가 볼 수 없습니다 스타일 시트 자체에 넣으려는 열 (예 :

)3210

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/results"> 
    <html> 
     <body> 
      <h2>My CD Collection</h2> 
      <table border="1"> 
       <!-- header --> 
       <tr> 
        <th>title</th> 
        <th>artist</th> 
       </tr> 
       <!-- body --> 
       <xsl:for-each select="r"> 
        <tr> 
         <td> 
          <xsl:value-of select="@title"/> 
         </td> 
         <td> 
          <xsl:value-of select="@artist"/> 
         </td> 
        </tr> 

       </xsl:for-each> 
      </table> 
     </body> 
    </html> 
</xsl:template> 

</xsl:stylesheet> 

하지만 당신이 정말로 별도의 목록에서 열 이름을 열거하려면, 그것을 이런 식으로 시도 :

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:variable name="columns"> 
    <name>title</name> 
    <name>artist</name> 
</xsl:variable> 

<xsl:variable name="column-names" select="document('')/*/xsl:variable[@name='columns']/name" /> 

<xsl:template match="/results"> 
    <html> 
     <body> 
      <h2>My CD Collection</h2> 
      <table border="1"> 
       <!-- header --> 
       <tr> 
        <xsl:for-each select="$column-names"> 
         <th> 
          <xsl:value-of select="." /> 
         </th> 
        </xsl:for-each> 
       </tr> 
       <!-- body --> 
       <xsl:for-each select="r"> 
        <xsl:variable name="row" select="."/> 
        <tr> 
         <xsl:for-each select="$column-names"> 
          <td> 
           <xsl:value-of select="$row/@*[name()=current()]"/> 
          </td> 
         </xsl:for-each> 
        </tr> 
       </xsl:for-each> 
      </table> 
     </body> 
    </html> 
</xsl:template> 

</xsl:stylesheet> 
관련 문제