отображение предельных записей с использованием xslt - PullRequest
0 голосов
/ 04 июня 2010

У меня проблема. Я получаю данные из 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 Ответ

1 голос
/ 04 июня 2010

попробуйте что-то вроде

<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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...