0

我对 XSLT 非常生疏,想知道是否有人可以给我一些指示。

编辑:使用 XSLT 1.0

原始 XML:

<gic>
    <application>
        <agent>
           ...child nodes
        </agent>
        <client>
           ...child nodes
        </client>
        <bank>
          ...child nodes
        </bank>
    </application>
</gic>

我需要将给定的 XML INPUT转换为具有 5 个客户端节点。输入可以包含 1-5 个填充的客户端节点。我需要确保输出中总是有 5 个。在这种情况下,提供一个,因此我需要插入 4 个客户端节点和所有子节点。所有子节点的值都必须为空。以 XML 格式输出

4

1 回答 1

0
<?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) &gt; 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>
于 2012-08-09T17:22:11.203 回答