如何使用 xslt 映射删除 xmlns= " "



我想转换XML

<IRheader>
    <Keys>
        <Key Type="TaxOfficeNumber">33</Key>
        <Key Type="TaxOfficeReference">33345</Key>
    </Keys>
    <PeriodEnd>2017-02-28</PeriodEnd>
    <Sender>Company</Sender>
</IRheader>

进入

<IRheader>
    <Keys>
        <Key Type="TaxOfficeNumber">33</Key>
        <Key Type="TaxOfficeReference">33345</Key>
    </Keys>
    <PeriodEnd>2017-02-28</PeriodEnd>
    <IRmark Type="generic"></IRmark>
    <Sender>Company</Sender>
</IRheader>

我正在使用以下XSL代码转换

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" />
    <xsl:template match="@*|node()" name="t1">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>
    <xsl:template match="*[local-name()='PeriodEnd']">
        <xsl:call-template name="t1" />
        <xsl:element name="IRmark">
            <xsl:attribute name="Type"><xsl:text>generic</xsl:text></xsl:attribute>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

之后我得到了

<IRheader>
    <Keys>
        <Key Type="TaxOfficeNumber">33</Key>
        <Key Type="TaxOfficeReference">33345</Key>
    </Keys>
    <PeriodEnd>2017-02-28</PeriodEnd>
    <IRmark xmlns="" Type="generic"></IRmark>
    <Sender>Company</Sender>
</IRheader>

请建议如何删除不需要的xmlns=""

如果将元素放在正确的名称空间中,则命名空间声明通常会照顾好自己。此问题通常是因为父元素在名称空间中,但IRMark不在。如果您在所需的名称空间中生成irmark,则名称空间声明通常会消失。

在您的示例中,包含的元素似乎不在名称空间中。由于您的帖子没有显示您了解名称空间的证据,我想知道您是否从您向我们展示的代码中删除了名称空间,因为您没有意识到它们很重要?如果不是这种情况,那么我看不出xmlns=""不陈述的原因,我想知道您正在使用哪个XSLT处理器。

最新更新