Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSLT中的累加变量_Xml_Xslt_Xpath - Fatal编程技术网

Xml XSLT中的累加变量

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

我有一个表,每行由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>
我能够跟踪前面同级的数量,但实际上不知道如何对所有前面同级的
@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结束(两列)。希望有帮助