我的输入如下:
<root>
<image>
<imag1 ></imag1>
<imag1 ></imag1>
<imag2 ></imag2>
<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>
<commTest>
<languageCode colNumber="4">fssdr</languageCode>
<languageCode colNumber="4">fr</languageCode>
<dummy colNumber="5">DDDUMM</dummy>
</commTest>
<commTest>
<languageCode colNumber="4">fd777r</languageCode>
<languageCode colNumber="4">fr777</languageCode>
<dummy colNumber="5">DDD777UMM</dummy>
</commTest>
</imageLink>
<changedName>
<languageCode colNumber="4">fd777r</languageCode>
<languageCode colNumber="4">fr777</languageCode>
<dummy colNumber="5">DDD777UMM</dummy>
</changedName>
<changedName>
<languageCode colNumber="4">fd777r</languageCode>
<languageCode colNumber="4">fr777</languageCode>
<dummy colNumber="5">DDD777UMM</dummy>
</changedName>
</image>
</root>
我需要的输出如下:
<?xml version="1.0" encoding="UTF-8"?>
<image rowNum="1">
<imag1 rowNum="1"/>
<imag1 rowNum="2"/>
<imag2 rowNum="1"/>
<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>
<commTest rowNum="3">
<languageCode rowNum="3" colNumber="4">fssdr</languageCode>
<languageCode rowNum="4" colNumber="4">fr</languageCode>
<dummy rowNum="3" colNumber="5">DDDUMM</dummy>
</commTest>
<commTest rowNum="5">
<languageCode rowNum="5" colNumber="4">fd777r</languageCode>
<languageCode rowNum="6" colNumber="4">fr777</languageCode>
<dummy rowNum="5" colNumber="5">DDD777UMM</dummy>
</commTest>
</imageLink>
<changedName rowNum="1">
<languageCode rowNum="1" colNumber="4">fd777r</languageCode>
<languageCode rowNum="2" colNumber="4">fr777</languageCode>
<dummy rowNum="1" colNumber="5">DDD777UMM</dummy>
</changedName>
<changedName rowNum="3">
<languageCode rowNum="3" colNumber="4">fd777r</languageCode>
<languageCode rowNum="4" colNumber="4">fr777</languageCode>
<dummy rowNum="3" colNumber="5">DDD777UMM</dummy>
</changedName>
</image>
这个过程发生在元素复杂度的多个级别中,这些行号被分配,以便它以行和列的形式进入excel表格
有人能帮我吗??
根据任何模式中的编号,尝试以下XSLT:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*"/>
<!-- To omit root node -->
<xsl:template match="root">
<xsl:apply-templates select="image"/>
</xsl:template>
<!-- All other elements -->
<xsl:template match="*">
<!-- Depth level -->
<xsl:variable name="lvl" select="count(ancestor::*) - 1"/>
<!-- Name of the current node -->
<xsl:variable name="currName" select="name()"/>
<!-- Name of the ancestor for numeration -->
<xsl:variable name="ancName">
<!-- Children of image - just 'image' -->
<xsl:if test="$lvl <= 1">
<xsl:value-of select="'image'"/>
</xsl:if>
<!-- "Deeper" descendants - one level deeper -->
<xsl:if test="$lvl > 1">
<xsl:value-of select="ancestor::*[$lvl - 1]/name()"/>
</xsl:if>
</xsl:variable>
<!-- Create element with current name -->
<xsl:element name="{$currName}">
<!-- Set rowNum -->
<xsl:attribute name="rowNum">
<xsl:number level="any" from="*[name()=$ancName]"/>
</xsl:attribute>
<!-- Process inner content -->
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
</xsl:template>
</xsl:transform>
计数与您的样本有点不同,但是:
从您所需的输出样本中,我看到图像的同名直接子级在整个输出中获得连续的数字。
正如你在以开头的评论中所说的,只要有变化,图像的所有直接子代的rowNums应从1中获取数字(在具有相同名称的节点组中单独计数)。