ajouter un préfixe à certains éléments
Bonjour,
Puis-je soumettre ce problème à votre sagacité ? Je ne parviens pas à comprendre mon erreur et vos explications seront les bienvenues.
Au départ, j'ai le XML suivant:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| <?xml version="1.0" encoding="UTF-8"?>
<IntraConsignment IntraListingsNbr="1" xmlns="http://www.xyz.com/IntraConsignment" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:common="http://www.xyz.com/InputCommon">
<IntraListing SequenceNumber="1" ClientsNbr="13" AmountSum="150.50">
<Declarant>
<Name>ABC</Name>
<Street>xxx</Street>
<City>Abc</City>
</Declarant>
<Period>
<Year>2019</Year>
</Period>
</IntraListing>
</IntraConsignment> |
à l'arrivée, je désire avoir le XML suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| <?xml version="1.0" encoding="UTF-8"?>
<IntraConsignment IntraListingsNbr="1" xmlns="http://www.xyz.com/IntraConsignment" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:common="http://www.xyz.com/InputCommon">
<IntraListing SequenceNumber="1" ClientsNbr="13" AmountSum="150.50">
<Declarant>
<common:Name>ABC</common:Name>
<common:Street>xxx</common:Street>
<common:City>Abc</common:City>
</Declarant>
<Period>
<Year>2019</Year>
</Period>
</IntraListing>
</IntraConsignment> |
Comme vous le voyez la différence se situe au niveau du préfixe "common:" ajouté à tous les éléments descendants de "Declarant".
J'ai essayé avec cette transformation XSLT
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <?xml version="1.0" encoding="UTF-8"?>
<!-- The main xsd schema calls another schema for common elements used in different files -->
<!-- we will change from : -->
<!-- ...
<name>ABC</name>
... -->
<!-- To :
<common:name>ABC</common:name>
... -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:common="http://www.xyz.com/InputCommon">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="@*|*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//Declarant">
<xsl:element name="common:{local-name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet> |
Malheureusement, cela ne fonctionne pas.
Je pense que le problème provient de mon expression xpath dans la ligne
Code:
<xsl:template match="//Declarant">
parce que si j'écris
Code:
<xsl:template match="*">
, alors il me met généreusement des "common:" à tous les éléments.
Où est mon erreur ?
Je désire comprendre, merci de m'expliquer comment corriger.
Merci.