Bonjour,
je souhaite ajouter une balise dans tous les noeuds d'un fichier XML :
exemple fichier de départ :
fichier souhaité :
Je souhaite donc ajouter XMLID partout, peu importe la profondeur du XML.
Je début en XSLT, voici mon code :
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
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