Transformation Flux XML, problème namespace
:salut:
Rapidement, je transmet un flux XML à l'aide de SOAP. Mon problème est de type XSL et pas Web Service ce qui explique ce post dans ce forum :aie:.
Je transforme donc ce flux à l'aide d'un fichier XSL.
Voilà mon entrée XML (simplifiée) :
Code:
1 2 3 4 5
| <web:testA xmlns:web="http://lien/">
<Livre>Dune</Livre>
<Magie>1</Magie>
<Useless>INUTILE</Useless>
</web:testA> |
Le rôle du xsl est de supprimer la balise "Useless", et de renommer la balise "testA" en "test".
Autre chose, le a un namespace qui peut être variable et que l'on ne connaît pas à l'avance, donc pas forcément "web". J'ai donc fait en sorte que mon xslt prenne en compte ce problème.
Mon xsl :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:plop="http://lien/">
<xsl:output method="xml" encoding="UTF-8" indent="no"
standalone="no" omit-xml-declaration="yes" />
<xsl:template match="node() | @*"
xmlns="http://lien/">
<xsl:choose>
<xsl:when test="local-name() = 'testA'">
<xsl:element name="plop:test">
<xsl:apply-templates />
</xsl:element>
</xsl:when>
<xsl:when test="local-name() = 'Livre'">
<xsl:element name="Livre">
<xsl:apply-templates />
</xsl:element>
</xsl:when>
<xsl:when test="local-name() = 'Magie'">
<xsl:element name="Magie">
<xsl:apply-templates />
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:copy>
<xsl:apply-templates select="node() | @*" />
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="Useless" />
</xsl:stylesheet> |
Et en sortie j'obtiens :
Code:
1 2 3 4 5
| <plop:test xmlns:plop="http://lien/">
<Livre xmlns:="http://lien/">Dune</Livre>
<Magie xmlns="http://lien/">1</Magie>
</plop:test> |
Mon problème : Je veux faire disparaître les
Code:
xmlns:="http://lien/"
à côté de "Livre" et "Magie" et quoi que je fasse je n'y arrive pas...
J'aimerai également avoir des avis sur le code du xslt en lui même (notamment pour la gestion du namespace variable).
Merci d'avance pour votre aide !