我有这个XSL,它可以很好地从元素中删除属性以生成最终的xml文档。但是,有些元素包含本地名称空间,Id也喜欢删除它们。这是我目前的XSL
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
XML可能看起来像这样
<?xml version="1.0" encoding="UTF-8"?>
<document>
<node1>
<node2 xmlns="www.xml.com">
<object>cars</object>
<object>boat</object>
</node2>
</node1>
</document>
我希望最终文件不包含xmlns =&#34; www.xml.com&#34;
答案 0 :(得分:1)
您可以使用local-name()
功能获取当前节点的名称。
使用它,您可以创建一个新元素,并为该元素提供原始元素的名称,而不是复制现有元素(以及它的命名空间)。
您还需要修改匹配语句,以确保您只捕获实际元素;即文本节点之类的东西仍然算作节点,但不会有本地名称;因此,使用element()
代替node()
可确保您只捕获(命名)元素。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="element()">
<xsl:element name="{local-name()}">
<xsl:apply-templates />
</xsl:element>
</xsl:template>
</xsl:stylesheet>