从以下文件开始:
<foo>
<bar>
<items>
<item attribull="true" name="foo" />
<item attribull="false" name="bar" />
<item attribull="true" name="foobar" />
</items>
(...)
</bar>
</foo>
我想制作以下文档,移动items
节点并移除所有attribull
属性。
<foo>
<items>
<item name="foo" />
<item name="bar" />
<item name="foobar" />
</items>
<bar>
(...)
</bar>
</foo>
我知道如何编写XSLT以将任何节点移动到其他位置,我知道如何编写XSLT以删除特定属性但是我不知道是否可以使用单 XSLT(一次通过)。
有任何线索吗?
答案 0 :(得分:2)
只需复制项目(此处通过默认递归规则),然后将<bar>
与所有子项复制除项目。要删除属性的所有实例,只需添加一个空匹配规则:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@attribull" />
<xsl:template match="bar">
<xsl:apply-templates select="items"/>
<xsl:copy>
<xsl:apply-templates select="@*|text()|*[not(self::items)]"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>