我想转换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处理器。