使用xslt限制记录显示

时间:2010-06-04 09:08:14

标签: xslt

我有问题。我从xml获取数据,然后用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 个答案:

答案 0 :(得分: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>

如果$ pos = 0表示您已到达第3行

以下是了解有关XSLT和XPath的更多信息 http://w3schools.com/xsl/default.asp http://w3schools.com/xpath/default.asp