我想转换以下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=""
答案 0 :(得分:1)
如果将元素放在正确的命名空间中,那么命名空间声明通常会自行处理。出现此问题的原因通常是父元素位于命名空间中,而IRMark则不是。如果在所需的命名空间中生成IRMark,则命名空间声明通常会消失。
在您的示例中,包含的元素似乎不在命名空间中。由于您的帖子没有显示您理解名称空间的证据,我想知道您是否从您向我们展示的代码中删除了它们,因为您没有意识到它们很重要?如果情况并非如此,那么我就不明白为什么存在xmlns=""
未声明,我想知道您正在使用哪个XSLT处理器。