Xml XSLT中的累加变量
我有一个表,每行由7列组成,以5个单元格的形式:Xml XSLT中的累加变量,xml,xslt,xpath,Xml,Xslt,Xpath,我有一个表,每行由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">H0792
<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>
我能够跟踪前面同级的数量,但实际上不知道如何对所有前面同级的@COLSPAN
属性求和,因为XSLT不允许变量增量
谢谢您的帮助。请查看
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>
输出:
<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>
1.
心轴
1.
H079249303
H079249301
可能最后一个条目
有namest=“c5”
?我想这是关于生成一个CALS表,其中namest
=列span中最左边的列的名称,nameend
=列span中最右边的列的名称。列名应该在
元素中定义。@mzjn,您是100%正确的。因此,最后两个单元格应该每个单元格占用两列。但我认为最后一个条目应该是从c6到c7,而不是c5。一行有7列。前三个单元格仅占用一个单元格,后两个单元格应占用两列。所以第四个单元格应该从c4开始,在c5结束(两列),而最后一个单元格应该从c6开始,在c7结束(两列)。希望有帮助