1

我知道如何删除命名空间,但我需要做的只是删除特定的命名空间前缀,例如转换这个文件(删除 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>

进入这个:

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

你能帮助我如何使用 XSLT 来完成它吗?

4

2 回答 2

2

几乎与 nwellnhof 相同的解决方案。但是在样式表中使用默认命名空间。添加: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>
于 2013-05-29T09:39:14.557 回答
1

试试下面的样式表。它包含身份转换和一个模板来剥离xenc:*元素的命名空间。请注意,xenc:*不处理属性。

<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>
于 2013-05-29T09:33:07.667 回答