如何使用xslt映射删除xmlns =“”

时间:2016-12-15 04:33:00

标签: xml xpath xslt-1.0

我想转换以下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=""

1 个答案:

答案 0 :(得分:1)

如果将元素放在正确的命名空间中,那么命名空间声明通常会自行处理。出现此问题的原因通常是父元素位于命名空间中,而IRMark则不是。如果在所需的命名空间中生成IRMark,则命名空间声明通常会消失。

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