2010-06-04 65 views
0

我有一個問題。我從xml獲取數據,然後使用xslt進行轉換。限制記錄顯示使用xslt

讓我們說我有一個XML文件:

<?xml version="1.0"?> 
<root> 
    <row id="1" fname="Dan" lname="Wahlin"> 
    <address type="home"> 
     <street>1234 Anywhere St.</street> 
     <city>AnyTown</city> 
     <zip>85789</zip> 
    </address> 
    <address type="business"> 
     <street>1234 LottaWork Ave.</street> 
     <city>AnyTown</city> 
     <zip>85786</zip> 
    </address> 
    </row> 
    <row id="2" fname="Elaine" lname="Wahlin"> 
    <address type="home"> 
     <street>1234 Anywhere St.</street> 
     <city>AnyTown</city> 
     <zip>85789</zip> 
    </address> 
    <address type="business"> 
     <street>1233 Books Way</street> 
     <city>AnyTown</city> 
     <zip>85784</zip> 
    </address> 
    </row> 
</root> 

而這個樣式表:

<?xml version="1.0" ?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 
<xsl:output method="xml" indent="yes" encoding="utf-8" omit-xml-declaration="no"/> 
    <xsl:template match="/"> 
    <root> 
     <xsl:apply-templates/> 
     </root> 
    </xsl:template> 
    <xsl:template match="row"> 
      <row> 
      <xsl:attribute name="id"> 
        <xsl:value-of select="id"/> 
       </xsl:attribute> 
       <xsl:attribute name="fname"> 
        <xsl:value-of select="name/fname"/> 
       </xsl:attribute> 
       <xsl:attribute name="lname"> 
        <xsl:value-of select="name/lname"/> 
       </xsl:attribute> 
       <xsl:for-each select="address"> 
        <xsl:copy-of select="."/> 
       </xsl:for-each>   </row> 
     </xsl:template> 
</xsl:stylesheet 

如何限制這3條記錄,再經過3個記錄它創建一個tr標籤?

例如:

<table> 
<tr> 
    <td>Address1</td> 
    <td>Address2</td> 
    <td>Address3</td> 
</tr> 
<tr> 
    <td>Address4</td> 
    <td>Address5</td> 
    <td>Address6</td> 
</tr> 
</table 
+1

目前尚不清楚你真正想要的輸出 - 提供的樣式表代碼會生成非HTML輸出,但是您聲明所需的輸出是HTML表格 - 並且不指定單元格中地址的格式和細節。請定義所需的確切輸出。 – 2010-06-04 18:34:47

回答

1

嘗試像

<xsl:for-each select="PATH"> 
<xsl:variable name="pos" select="position() mod 3" /> 

</xsl:for-each> 

那麼你就可以

<xsl:if test="$pos = 0"> 
</xsl:if> 

<xsl:if test="$pos != 0"> 
</xsl:if> 
工作0

如果$ POS = 0意味着你達到了第三排

這裏有一些很好的資源,以瞭解更多關於XSLT和XPath http://w3schools.com/xsl/default.asp http://w3schools.com/xpath/default.asp

+0

嗨克里斯蒂娜謝謝你,順便說一下,什麼是「路徑[位置] <3]」 – user335160 2010-06-04 09:15:44

+0

我不知道你的XML是怎麼樣的 - 所以我不知道你需要的節點的路徑。例如「/ root/Adresses」 和[position()<4]只選擇前3條記錄。 – 2010-06-04 09:34:56

+0

是的,我知道了,但這隻限於3條記錄顯示,我想顯示剩餘的記錄讓我們說我有一張表,然後在每3條記錄中創建一個tr標籤,意思是說我有3個「td」標籤每個「tr」標籤 – user335160 2010-06-04 09:39:03