我有一个表,每行包含7列,并以5个单元格的形式:
<ROW>
<CELL ROWSPAN="1" COLSPAN="1">1</CELL>
<CELL ROWSPAN="1" COLSPAN="1">Mandrel</CELL>
<CELL ROWSPAN="1" COLSPAN="1">1</CELL>
<CELL ROWSPAN="1" COLSPAN="2">H079249303</CELL>
<CELL ROWSPAN="1" COLSPAN="2">H079249301</CELL>
</ROW>
现在我的模板与每个人<CELL>
匹配并将其转换为<entry>
,对于那些@COLSPAN
值大于1的人(如上面的最后两个单元格),我需要要为它们设置namest
和namend
属性,例如,上面的代码将变为:
<row>
<entry>1</entry>
<entry>Mandrel</entry>
<entry>1</entry>
<entry namest="c4" nameend="c5">H079249303</entry>
<entry namest="c6" nameend="c7">H079249301</entry>
</row>
我能够跟踪前面兄弟的数量,但实际上不知道如何对所有前面兄弟的@COLSPAN
属性求和,因为XSLT不允许变量增量。
感谢您的帮助。
答案 0 :(得分:3)
查看sum
函数,即:
<强> XSLT 强>:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="ROW">
<row>
<xsl:apply-templates select="CELL"/>
</row>
</xsl:template>
<xsl:template match="CELL">
<entry>
<xsl:if test="@COLSPAN > 1">
<xsl:attribute name="namest">
<xsl:value-of select="concat('c', sum(preceding-sibling::CELL/@COLSPAN) + 1)"/>
</xsl:attribute>
<xsl:attribute name="nameend">
<xsl:value-of select="concat('c', sum(preceding-sibling::CELL/@COLSPAN) + @COLSPAN)"/>
</xsl:attribute>
</xsl:if>
<xsl:value-of select="."/>
</entry>
</xsl:template>
</xsl:stylesheet>
<强>输出强>:
<row>
<entry>1</entry>
<entry>Mandrel</entry>
<entry>1</entry>
<entry namest="c4" nameend="c5">H079249303</entry>
<entry namest="c6" nameend="c7">H079249301</entry>
</row>