输入格式如下:
<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>
输出格式如下:
<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>
然后将此输出添加到Excel格式。如何完全按照输出格式检索行号?
答案 0 :(得分:1)
我认为一种方法是为第一个rowNum
及其子项计算属性imageLink
,然后将最大值+ 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>
到
<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>