对节点进行计数,并在XSLT中不使用任何值进行复制
我对XSLT非常生疏,不知道是否有人能给我一些建议 编辑:使用XSLT1.0 原始XML:对节点进行计数,并在XSLT中不使用任何值进行复制,xslt,Xslt,我对XSLT非常生疏,不知道是否有人能给我一些建议 编辑:使用XSLT1.0 原始XML: <gic> <application> <agent> ...child nodes </agent> <client> ...child nodes </client> <bank>
<gic>
<application>
<agent>
...child nodes
</agent>
<client>
...child nodes
</client>
<bank>
...child nodes
</bank>
</application>
</gic>
…子节点
…子节点
…子节点
我需要将给定的XML输入转换为具有5个客户端节点。输入可以包含填充的1-5个客户端节点。我需要确保输出中始终有5个。在本例中,一个是提供的,因此我需要插入4个客户端节点和所有子节点。所有子节点的值都必须为空。以XML格式输出
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="application" as="node()*">
<xsl:copy>
<xsl:apply-templates select="agent" />
<!-- copy existing cliens -->
<xsl:apply-templates select="client" />
<!-- add new clients -->
<xsl:call-template name="AddClients">
<xsl:with-param name="times" select="10 - count(client)" />
</xsl:call-template>
<!-- copy banks -->
<xsl:apply-templates select="bank" />
</xsl:copy>
</xsl:template>
<xsl:template name="AddClients">
<xsl:param name="times" select="1" />
<xsl:if test="number($times) > 0">
<!-- new element here -->
<xsl:element name="client">
<xsl:attribute name="a1">
<xsl:value-of select="asas" />
</xsl:attribute>
</xsl:element>
<xsl:call-template name="AddClients">
<xsl:with-param name="times" select="$times - 1" />
</xsl:call-template>
</xsl:if>
</xsl:template>
<!-- default -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
谢谢您的回答@Lesiak。我对我的问题进行了编辑,以简化问题,希望能让问题更清楚一些。谢谢你的时间。