如何在xslt中基于元素重复检索行号?

如何在xslt中基于元素重复检索行号?,xslt,xslt-1.0,xslt-2.0,Xslt,Xslt 1.0,Xslt 2.0,输入的格式如下: <imageLink> <url colNumber="1">aa</url> <imageTypeCode colNumber="2">PRODUCT_IMAGE</imageTypeCode> <languageCode colNumber="3">en</languageCode> <languageCode colNumber="3">fr&l

输入的格式如下:

<imageLink>
    <url colNumber="1">aa</url>
    <imageTypeCode colNumber="2">PRODUCT_IMAGE</imageTypeCode>
    <languageCode colNumber="3">en</languageCode>
    <languageCode colNumber="3">fr</languageCode>
</imageLink>
<imageLink>
    <url colNumber="1">bb</url>
    <imageTypeCode colNumber="2">PRODUCT_IMAGE</imageTypeCode>
    <languageCode colNumber="3">fr</languageCode>
</imageLink>

aa
产品形象
EN
fr
bb
产品形象
fr
输出格式如下:

<imageLink rowNum="1">
    <url rowNum="1" colNumber="1">aa</url>
    <imageTypeCode rowNum="1" colNumber="2">PRODUCT_IMAGE</imageTypeCode>
    <languageCode rowNum="1" colNumber="3">en</languageCode>
    <languageCode rowNum="2" colNumber="3">en1</languageCode>
</imageLink>
<imageLink rowNum="3">
    <url rowNum="3" colNumber="1">bb</url>
    <imageTypeCode rowNum="3" colNumber="2">PRODUCT_IMAGE</imageTypeCode>
    <languageCode rowNum="3" colNumber="3">fr</languageCode>
</imageLink>         

aa
产品形象
EN
en1
bb
产品形象
fr
然后将此输出进一步添加到Excel格式。如何准确地检索输出格式中显示的行号


我认为一种方法是计算第一个
imageLink
及其子级的属性
rowNum
,然后取最大值+1作为下一个同级的起始值:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">

    <xsl:strip-space elements="*"/>
    <xsl:output indent="yes"/>

    <xsl:template match="root">
        <xsl:copy>
            <xsl:apply-templates select="*[1]"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="root/*">
        <xsl:param name="row" select="1"/>
        <xsl:variable name="copy" as="element()">
            <xsl:copy>
                <xsl:attribute name="rowNum" select="$row"/>
                <xsl:apply-templates>
                    <xsl:with-param name="row" select="$row"/>
                </xsl:apply-templates>
            </xsl:copy>
        </xsl:variable>
        <xsl:copy-of select="$copy"/>
        <xsl:apply-templates select="following-sibling::*[1]">
            <xsl:with-param name="row" select="max($copy/*/@rowNum) + 1"/>
        </xsl:apply-templates>
    </xsl:template>

    <xsl:template match="root/*/*">
        <xsl:param name="row"/>
        <xsl:copy>
            <xsl:variable name="index" as="xs:integer">
                <xsl:number/>
            </xsl:variable>
            <xsl:attribute name="rowNum" select="$row - 1 + $index"/>
            <xsl:copy-of select="@*, node()"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

转变

<root>
    <imageLink>

        <url colNumber="1">aa</url>

        <imageTypeCode colNumber="2">PRODUCT_IMAGE</imageTypeCode>

        <languageCode colNumber="3">en</languageCode>

        <languageCode colNumber="3">fr</languageCode>
    </imageLink>
    <imageLink>

        <url colNumber="1">bb</url>

        <imageTypeCode colNumber="2">PRODUCT_IMAGE</imageTypeCode>

        <languageCode colNumber="3">fr</languageCode>
    </imageLink>
</root>

aa
产品形象
EN
fr
bb
产品形象
fr
进入


aa
产品形象
EN
fr
bb
产品形象
fr

是的,这与您所说的完全一样,但我尝试将其用于以下过程,但它不起作用:请编辑您的问题,显示并解释输入有多复杂,以及您想要的新样本结果。这是在export的第23行第59列的xsl:apply templates/@select中的表达式{./*[not()]}中的字符5处抛出errorStatic error。xsl:XPST0017:System function not()不能用零参数调用{root/*/}中字符8处的Static error在export第34行第36列的xsl:template/@match中的模式中。xsl:XTSE0340:在样式表编译期间报告了表达式开头的意外标记“”错误。如果您可以有子元素而不仅仅是子元素,则将
..
更改为
..
xsl:template match=“root/*/*”
xsl:template match=“root/*//”
<root>
   <imageLink rowNum="1">
      <url rowNum="1" colNumber="1">aa</url>
      <imageTypeCode rowNum="1" colNumber="2">PRODUCT_IMAGE</imageTypeCode>
      <languageCode rowNum="1" colNumber="3">en</languageCode>
      <languageCode rowNum="2" colNumber="3">fr</languageCode>
   </imageLink>
   <imageLink rowNum="3">
      <url rowNum="3" colNumber="1">bb</url>
      <imageTypeCode rowNum="3" colNumber="2">PRODUCT_IMAGE</imageTypeCode>
      <languageCode rowNum="3" colNumber="3">fr</languageCode>
   </imageLink>
</root>