0

私はXSLTで非常に錆びており、誰かが私にいくつかの指針を与えることができるかどうか疑問に思っていました。

編集:XSLT1.0の使用

元のXML:

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

指定されたXMLINPUTを5つのクライアントノードを持つように変換する必要があります。入力には、1〜5個のクライアントノードが入力されている場合があります。出力に常に5が含まれるようにする必要があります。この場合、1つは提供されているので、すべての子ノードを含む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 に答える