0
我使用下面的xslt删除命名空间。有没有办法修改这个以删除nil =“true”和空标签的元素(例如:<data/>
)?XSLT - 删除nil = true&空元素
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:template match="*">
<xsl:element name="{local-name(.)}">
<xsl:apply-templates select="@* | node()" />
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name(.)}">
<xsl:value-of select="." />
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
我没有看到很大的提升空间,但有一点要注意:这将如果包含注释,属性和处理指令的元素包含'xsi:nil =“true”'属性,则移除它们。那是你要的吗? – JLRishe
感谢@JLRishe突出显示潜在问题。截至目前,我正在使用的XML数据没有属性。 –
此代码存在问题,因为模板规则不明确。一个元素可能匹配规则2和3(并且它们具有相同的优先级)。同样,属性将匹配规则1和规则5.元素匹配规则1和规则4,但这不是一个问题,因为规则4具有更高的优先级。如果有两个规则与具有相同优先级的节点相匹配,那么究竟发生了什么取决于您使用的是哪个版本的XSLT,而使用XSLT 1.0则取决于您使用的是哪个处理器。因此,通过指定优先级来保证不发生这种情况是最安全的。 –