【问题标题】:Remove xmlns="" from element on output从输出元素中删除 xmlns=""
【发布时间】:2019-11-26 16:30:46
【问题描述】:

我有一个转换是添加两个要上传到系统的元素。但是两个元素节点在其中显示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 transformation


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-24
      相关资源
      最近更新 更多