从输出上的元素中删除 xmlns= " "



我有一个转换,它正在添加两个要上传到系统的元素。但是,两个元素节点在它们内部显示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>

如果您显示输入 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>

最新更新