web-dev-qa-db-fra.com

Utilisation de XSLT pour copier tous les nœuds en XML, avec prise en charge de cas spéciaux

Disons que j'ai un gros fichier XML qui a la structure suivante:

<MyXml>
  <Data1>
    <Node1>1234</Node1>
    <Node2>abc<Node2>
    <Node3>gfdf</Node3>
    ...
    <Node10000>more text</Node10000>
  </Data1>
  <Data2>
    ...
  </Data2>
</MyXml>

Je veux transformer ce XML en un autre XML qui a exactement la même apparence, mais a une certaine chaîne concaténée à un certain nœud, disons Node766. J'utilise un XSLT bien sûr et je me demande comment je peux lui dire de copier tout tel quel sauf pour Node766, où je dois faire quelque chose avant de le sortir.

27
del.ave
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<!--Identity template, 
        provides default behavior that copies all content into the output -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!--More specific template for Node766 that provides custom behavior -->
    <xsl:template match="Node766">  
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
            <!--Do something special for Node766, like add a certain string-->
            <xsl:text> add some text </xsl:text>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>
65
Mads Hansen

Commencez par un transformation d'identité , et incluez une correspondance de modèle pour votre exception.

14
Don Roby