/ / Comment supprimer le préfixe d'espace de noms laissant la valeur d'espace de noms (XSLT)? - xml, xslt

Comment supprimer le préfixe d'espace de noms en laissant la valeur d'espace de noms (XSLT)? - xml, xslt

Je sais comment supprimer les espaces de noms, mais ce que je dois faire est uniquement de supprimer des préfixes d'espace de noms spécifiques, par exemple transformer ce fichier (en supprimant les préfixes xenc):

<?xml version="1.0" encoding="utf-8"?>
<xenc:EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"/>
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<xenc:EncryptedKey xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
</xenc:EncryptedKey>
<ds:X509Data>
<ds:X509Certificate>AAA=</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>

dans ceci:

<?xml version="1.0" encoding="utf-8"?>
<EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"/>
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<EncryptedKey xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
</EncryptedKey>
<ds:X509Data>
<ds:X509Certificate>AAA=</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>

Pouvez-vous m'aider comment cela pourrait être fait en utilisant XSLT?

Réponses:

2 pour la réponse № 1

Presque la même solution que de nwellnhof. Mais utilisez l'espace de noms par défaut dans la feuille de style. Ajouter: xmlns="http://www.w3.org/2001/04/xmlenc#".

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
xmlns="http://www.w3.org/2001/04/xmlenc#"  >
<xsl:output indent="yes"/>

<xsl:template match="xenc:*">
<xsl:element name="{local-name()}" >
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>

<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>


</xsl:stylesheet>

1 pour la réponse № 2

Essayez la feuille de style suivante. Il contient la transformation d'identité et un modèle pour dépouiller l'espace de noms de xenc:* éléments. Notez que xenc:* les attributs ne sont pas gérés.

<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">

<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>

<xsl:template match="xenc:*">
<xsl:element name="{local-name()}" namespace="http://www.w3.org/2001/04/xmlenc#">
<xsl:apply-templates select="node() | @*"/>
</xsl:element>
</xsl:template>

</xsl:stylesheet>