我需要一些關於XSLT的幫助。計算XSLT1.0中的行數
我得到一個XML文件,我需要在文件中報告一些數據兩次,soem數據需要過濾掉。
並在頁腳上我需要準確報告文件中有多少行。
是否有人可以幫助我在這裏感謝
這裏是我的XML:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<ns0:File xmlns:ns0="file">
<ns0:Records>
<ns0:Main>
<ns0:Info>
<ns0:InternalCode>1</ns0:InternalCode>
<ns0:Name>test1</ns0:Name>
<ns0:Factor>2.000000000000</ns0:Factor>
<ns0:Type>a</ns0:Type>
</ns0:Info>
</ns0:Main>
<ns0:Main>
<ns0:Info>
<ns0:InternalCode>2</ns0:InternalCode>
<ns0:Name>test2</ns0:Name>
<ns0:Factor>10.000000000000</ns0:Factor>
<ns0:Type>c</ns0:Type>
</ns0:Info>
</ns0:Main>
<ns0:Main>
<ns0:Info>
<ns0:InternalCode>3</ns0:InternalCode>
<ns0:Name>test3</ns0:Name>
<ns0:Factor>13.000000000000</ns0:Factor>
<ns0:Type>b</ns0:Type>
</ns0:Info>
</ns0:Main>
<ns0:Main>
<ns0:Info>
<ns0:InternalCode>4</ns0:InternalCode>
<ns0:Name>test4</ns0:Name>
<ns0:Factor>1.000000000000</ns0:Factor>
<ns0:Type>a</ns0:Type>
</ns0:Info>
</ns0:Main>
<ns0:Main>
<ns0:Info>
<ns0:InternalCode>5</ns0:InternalCode>
<ns0:Name>test5</ns0:Name>
<ns0:Factor>1.000000000000</ns0:Factor>
<ns0:Type>f</ns0:Type>
</ns0:Info>
</ns0:Main>
</ns0:Records>
<ns0:Footer>
<ns0:Time>10:54:40</ns0:Time>
<ns0:NumberOfRecords>5</ns0:NumberOfRecords>
</ns0:Footer>
</ns0:File>
這裏是我的XSLT:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns0="file">
<xsl:output method="text"
encoding="ASCII"/>
<xsl:template match="ns0:Main">
<xsl:variable name="substractone">
<xsl:value-of select="ns0:Info/ns0:Factor-1"/>
</xsl:variable>
<xsl:if test=" ns0:Factor !=0 and ns0:Type !='c' and $substractone !=0 ">
<xsl:choose>
<xsl:when test="ns0:Type = 'a'">
<xsl:value-of select="ns0:InternalCode"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="ns0:Name"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="ns0:Factor"/>
<xsl:text>
</xsl:text>
<!-- repeat in a new line -->
<xsl:value-of select="ns0:InternalCode"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="ns0:Name"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="ns0:Factor"/>
<xsl:text>
</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="ns0:InternalCode"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="ns0:Name"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="ns0:Factor"/>
<xsl:text>
</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:template>
<xsl:template match="ns0:Footer">
<!--Footer row-->
<xsl:text>
</xsl:text>
<xsl:text>*</xsl:text>
<xsl:value-of select="ns0:NumberOfRecords"/>
<!--record total-->
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
正如你可以看到NS0:NumberOfRecords會在這裏返回5,但實際上這個文件有4行(過濾出type = c,每行爲= 2行)
有人可以告訴我如何才能正確地獲取文件中的行數?
你明明看着我的答案(因爲你在你的代碼,我指出糾正錯誤)。你介意告訴我它是否解決了你的問題?順便說一下,請接受這裏的答案之一:http://stackoverflow.com/questions/12743828/how-to-do-square-root-in-xslt-1-0 –