2013-06-18 61 views
-1

有什麼方法根據屬性輸出值?
我很新的XSLT,所以請多多包涵,如果很明顯:)基於屬性的輸出值

我有一個XML看起來像這樣:

<Columns> 
    <Column DataType="String">Id</Column> 
    <Column DataType="String">FirstName</Column> 
    <Column DataType="String">LastName</Column> 
    <Column DataType="String">TheDescription</Column> 
</Columns> 
<Rows> 
    <Row> 
     <Value Column="Id">1</Value> 
     <Value Column="FirstName">John</Value> 
     <Value Column="LastName">Doe</Value> 
     <Value Column="TheDescription">Some description about John Doe</Value> 
    </Row> 
    <Row> 
     <Value Column="Id">2</Value> 
     <Value Column="FirstName">Jane</Value> 
     <Value Column="LastName">Doe</Value> 
     <Value Column="TheDescription">Some description about Jane Doe</Value> 
    </Row> 
</Rows> 

我試着做到以下幾點:

<xsl:template match="Template"> 
    <xsl:apply-templates select="loop[@name='Rows']" /> 
</xsl:template> 

<xsl:template match="loop[@name='Rows']"> 
    <table border="1" cellpadding="2" cellspacing="2"> 
     <tr> 
      <xsl:apply-templates select="../loop[@name='Columns']/item" mode="header" /> 
     </tr> 
     <xsl:apply-templates select="item" mode="row" /> 
    </table> 
</xsl:template> 

<xsl:template match="item" mode="row"> 
    <tr> 
     <xsl:apply-templates select="loop[@name='Row']" /> 
    </tr> 
</xsl:template> 

<xsl:template match="loop[@name='Row']"> 
    <xsl:param name="Column" /> 
    <xsl:if test="$Column = FirstName"> 
     <td>Output the value of FirstName here!</td> 
    </xsl:if> 
</xsl:template> 

最後6行應輸出FirstName。如何做到這一點?

+0

您的XML不符合你的XSLT的。 XLST預期具有鬃毛屬性的循環節點。 –

+0

@ hr_117格式化XSLT時出錯了。第一塊代碼已被添加。 – Crave

+0

真的沒有幫助。這段代碼不會對你的XML –

回答

0

我想你需要的是這樣的:

<?xml version="1.0"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="html" encoding="iso-8859-1" indent="yes"/> 
    <xsl:template match="/*"> 
     <table> 
      <tr> 
       <xsl:for-each select="Columns/Column"> 
        <th><xsl:value-of select="." /></th> 
       </xsl:for-each> 
      </tr> 
      <xsl:for-each select="Rows/Row"> 
       <tr> 
        <xsl:for-each select="Value"> 
         <td> 
          <xsl:choose> 
           <xsl:when test="@Column = 'FirstName'"> 
            <b><xsl:value-of select="." /></b> 
           </xsl:when> 
           <xsl:when test="@Column = 'LastName'"> 
            <i><xsl:value-of select="." /></i> 
           </xsl:when> 
           <xsl:otherwise> 
            <xsl:value-of select="." /> 
           </xsl:otherwise> 
          </xsl:choose> 
         </td> 
        </xsl:for-each> 
       </tr> 
      </xsl:for-each> 
     </table> 
    </xsl:template> 
</xsl:stylesheet> 
+0

感謝@Rubens Farias。但我想要做的是實際上根據屬性對值進行排序(例如'FirstName','LastName')。所以如果這個屬性是'FirstName',那麼將其設爲粗體,如果它是'LastName',則將其設爲斜體。是否可以用'「或其他東西來完成?我不知道如何獲取屬性。 – Crave

+0

你可以使用'xsl:if'或'xsl:choose';要引用一個屬性,你需要用一個'@'字符來加前綴 –