我是新的XSLT,任何机构都可以建议完全转换的XSLT代码::: 多层次XML文件位于::
之下<ROOT>
<RECORD>
<TAG1> One </TAG1>
<TAG2> Two A</TAG2>
<TAG2> Two B</TAG2>
<TAG3> Three</TAG3>
<TAG4> Four A</TAG4>
<TAG4> Four B</TAG4>
<TAG5> Five </TAG5>
</RECORD>
<RECORD>
<TAG1> One </TAG1>
<TAG2> Two A</TAG2>
<TAG2> Two B</TAG2>
<TAG2> Two C</TAG2>
<TAG3> Three</TAG3>
<TAG4> Four A</TAG4>
<TAG4> Four B</TAG4>
<TAG4> Four C</TAG4>
<TAG5> Five </TAG5>
</RECORD>
<RECORD>
<TAG1> One </TAG1>
<TAG2> Two</TAG2>
<TAG3> Three</TAG3>
<TAG4> Four</TAG4>
<TAG5> Five </TAG5>
</RECORD>
</ROOT>
我想将上面的内容转换为以下内容::
<ROOT>
<RECORD>
<TAG1> One </TAG1>
<TAG2> Two A</TAG2>
<TAG3> Three</TAG3>
<TAG4> Four A</TAG4>
<TAG5> Five </TAG5>
</RECORD>
<RECORD>
<TAG1> One </TAG1>
<TAG2> Two B</TAG2>
<TAG3> Three</TAG3>
<TAG4> Four B</TAG4>
<TAG5> Five </TAG5>
</RECORD>
<RECORD>
<TAG1> One </TAG1>
<TAG2> Two A</TAG2>
<TAG3> Three</TAG3>
<TAG4> Four A</TAG4>
<TAG5> Five </TAG5>
</RECORD>
<RECORD>
<TAG1> One </TAG1>
<TAG2> Two B</TAG2>
<TAG3> Three</TAG3>
<TAG4> Four B</TAG4>
<TAG5> Five </TAG5>
</RECORD>
<RECORD>
<TAG1> One </TAG1>
<TAG2> Two C</TAG2>
<TAG3> Three</TAG3>
<TAG4> Four C</TAG4>
<TAG5> Five </TAG5>
</RECORD>
<RECORD>
<TAG1> One </TAG1>
<TAG2> Two</TAG2>
<TAG3> Three</TAG3>
<TAG4> Four</TAG4>
<TAG5> Five </TAG5>
</RECORD>
</ROOT>
任何机构都可以为此建议XSLT代码吗? 感谢。
答案 0 :(得分:0)
对于这种情况,命名模板(函数)是必需的。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:template name="addRecord">
<xsl:param name="rank" select="1" />
<xsl:param name="numberOfRecords" />
<xsl:if test="$rank <= $numberOfRecords">
<RECORD>
<xsl:copy-of select="TAG1" />
<xsl:copy-of select="TAG2[$rank]" />
<xsl:copy-of select="TAG3" />
<xsl:copy-of select="TAG4[$rank]" />
<xsl:copy-of select="TAG5" />
</RECORD>
<xsl:call-template name="addRecord">
<xsl:with-param name="rank" select="$rank + 1" />
<xsl:with-param name="numberOfRecords" select="$numberOfRecords" />
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template match="ROOT">
<xsl:copy>
<xsl:apply-templates select="RECORD" />
</xsl:copy>
</xsl:template>
<xsl:template match="RECORD">
<xsl:call-template name="addRecord">
<xsl:with-param name="numberOfRecords">
<xsl:choose>
<xsl:when test="count(TAG2) > count(TAG4)">
<xsl:value-of select="count(TAG2)" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="count(TAG4)" />
</xsl:otherwise>
</xsl:choose>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
</xsl:stylesheet>