/ / Come rimuovere il prefisso dello spazio dei nomi lasciando il valore dello spazio dei nomi (XSLT)? - xml, xslt

Come rimuovere il prefisso dello spazio dei nomi lasciando il valore dello spazio dei nomi (XSLT)? - xml, xslt

So come rimuovere gli spazi dei nomi, ma quello che devo fare è solo rimuovere prefissi specifici dello spazio dei nomi, ad esempio trasformare questo file (rimuovendo i prefissi 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>

in questo:

<?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>

Puoi aiutarmi come potrebbe essere fatto usando XSLT?

risposte:

2 per risposta № 1

Quasi la stessa soluzione di nwellnhof. Ma usa lo spazio dei nomi predefinito nel foglio di stile. Inserisci: 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 per risposta № 2

Prova il seguente foglio di stile. Contiene la trasformazione dell'identità e un modello di cui rimuovere lo spazio dei nomi xenc:* elementi. Nota che xenc:* gli attributi non vengono gestiti.

<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>