Bonjour,

je souhaite ajouter une balise dans tous les noeuds d'un fichier XML :

exemple fichier de départ :

<?xml version="1.0"?>
<Tests>
  <Test>
    <Name>Convert number to string</Name>
    <CommandLine>Examp1.EXE</CommandLine>
    <Input>1</Input>
    <Output>One</Output>
    <SousTest>
       <Name>bla</Name>
   </SousTest>
  </Test>
  <Test>
    <Name>Find succeeding characters</Name>
    <CommandLine>Examp2.EXE</CommandLine>
    <Input>abc</Input>
    <Output>def</Output>
    <SousTest>
       <Name>blabla</Name>
   </SousTest>
  </Test>
</Tests>


fichier souhaité :


<?xml version="1.0"?>
<Tests>
  <Test>
    <XMLID></XMLID>
    <Name>Convert number to string</Name>
    <CommandLine>Examp1.EXE</CommandLine>
    <Input>1</Input>
    <Output>One</Output>
    <SousTest>
       <XMLID></XMLID>
       <Name>bla</Name>
   </SousTest>
  </Test>
  <Test>
    <XMLID></XMLID>
    <Name>Find succeeding characters</Name>
    <CommandLine>Examp2.EXE</CommandLine>
    <Input>abc</Input>
    <Output>def</Output>
    <SousTest>
       <XMLID></XMLID>
       <Name>blabla</Name>
   </SousTest>
  </Test>
</Tests>


Je souhaite donc ajouter XMLID partout, peu importe la profondeur du XML.
Je début en XSLT, voici mon code :


'<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:uuid="java.util.UUID" exclude-result-prefixes="uuid">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>  
  
  <!-- If an element is a child of library, copy the content and add type element. -->
  <xsl:template match="Test|SousTest">
    <xsl:copy>
      <xsl:element name="XMLID">
        <!--<xsl:variable name="random" select="uuid:randomUUID()"/>-->
        <!--<xsl:value-of select="$random"/>-->
      </xsl:element>
 
      <xsl:call-template name="copy-children"/>
    </xsl:copy>
  </xsl:template>
   
  <!-- Copy the children of the current node. -->
  <xsl:template name="copy-children">
    <xsl:copy-of select="./*"/>
  </xsl:template>
 
  <!-- Generic identity template -->
  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>'


Mon problème est que ma balise XMLID n'est ajoutée qu'au premier niveau, dans Test, elle n'est pas ajoutée dans SousTest. Auriez-vous une solution ?

Merci