从输出的元素中删除xmlns =“”

时间:2019-07-17 19:05:26

标签: xml xslt transformation

我有一个转换,其中添加了两个要上传到系统的元素。但是,这两个元素节点在其中显示xmlns="",我想在输出文件中将其删除。

我们的转换文件是

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xpath-default-namespace="urn:iso:std:iso:20022:tech:xsd:camt.053.001.02"
    exclude-result-prefixes="xs"
    version="2.0">
    <xsl:output method="xml" version="1.0" omit-xml-declaration="yes" encoding="UTF-8" />


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

    <xsl:template match="Refs">  
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
            <xsl:element name="ChqNb">
                <xsl:value-of select="../RltdPties/Cdtr|UltmtCdtr"/>
            </xsl:element>
            <ClrSysRef><xsl:value-of select="../RltdPties/Dbtr|UltmtDbtr"/></ClrSysRef>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

问题所在的输出部分看起来像:

<Refs>
    <EndToEndId>1234556789</EndToEndId>
    <ChqNb xmlns="">
       ZZZZZ
    </ChqNb>
    <ClrSysRef xmlns="">
       BS/BADAA
    </ClrSysRef>
</Refs>

我希望结果是

<Refs>
    <EndToEndId>1234556789</EndToEndId>
    <ChqNb>
       ZZZZZ
    </ChqNb>
    <ClrSysRef>
       BS/BADAA
    </ClrSysRef>
</Refs>

1 个答案:

答案 0 :(得分:0)

如果显示输入的XML会有所帮助,但是从在XSLT中使用xpath-default-namespace来看,这表明XML中有一个xmlns="urn:iso:std:iso:20022:tech:xsd:camt.053.001.02"声明,因此您要复制的所有元素XSLT将在该命名空间中。

但是,在XSLT中创建新的ChqNbClrSysRef的地方,它们将没有命名空间,因为xpath-default-namespace仅适用于xpath表达式中未前缀的元素(例如模板匹配) )。为了使其正常工作,您还应该在XSLT中添加默认的名称空间声明。在这种情况下,此操作可能会继续xsl:template

<xsl:template match="Refs" xmlns="urn:iso:std:iso:20022:tech:xsd:camt.053.001.02">  
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
        <xsl:element name="ChqNb">
            <xsl:value-of select="../RltdPties/Cdtr|UltmtCdtr"/>
        </xsl:element>
        <ClrSysRef><xsl:value-of select="../RltdPties/Dbtr|UltmtDbtr"/></ClrSysRef>
    </xsl:copy>
</xsl:template>