Xml xslt只复制某些子体
我试图复制一些没有特定属性的子元素。我想不出做这件事的正确方法 文件如下:Xml xslt只复制某些子体,xml,xslt,Xml,Xslt,我试图复制一些没有特定属性的子元素。我想不出做这件事的正确方法 文件如下: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <itemlist> <item> <subitem id="g0b86bn6"/> <subitem> <subitem/> <subitem id="8967698
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<itemlist>
<item>
<subitem id="g0b86bn6"/>
<subitem>
<subitem/>
<subitem id="8967698"/>
</subitem>
<subitem>
<subitem/>
<subitem id="9868966n7"/>
<subitem>
<subitem id="9896"/>
<subitem>
</subitem>
</item>
</itemlist>
这些元素可以任意嵌套
预期产出:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<itemlist>
<item>
<subitem>
<subitem/>
</subitem>
<subitem>
<subitem/>
</subitem>
</item>
</itemlist>
我的xsl:
<xsl:template match="item">
<xsl:for-each select="child::*">
<xsl:if test=".[not(@id)]">
<xsl:copy>
<xsl:apply-templates select=". | @*"/>
</xsl:copy>
</xsl:if>
</xsl:for-each>
</xsl:template>
问题是:它只复制子代,而不复制后代。复制也复制我不想复制的后代
我该怎么做?谢谢你的帮助和提示 在这种情况下,首选的策略是使用身份转换模板按原样复制所有内容,然后添加异常模板以抑制您希望传递到输出的节点。例如,以下样式表: XSLT1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="subitem[@id]"/>
</xsl:stylesheet>
你的问题不够清楚。移除元素的确切条件是什么?这仅仅是一个
id
属性的存在吗?如果是这样,你的结果与你的意图不符还要注意,您的输入格式不正确。
<itemlist>
<item>
<subitem id="g0b86bn6"/>
<subitem>
<subitem/>
<subitem id="8967698"/>
</subitem>
<subitem>
<subitem/>
<subitem id="9868966n7"/>
<subitem>
<subitem id="9896"/>
</subitem>
</subitem>
</item>
</itemlist>
<?xml version="1.0" encoding="utf-8"?>
<itemlist>
<item>
<subitem>
<subitem/>
</subitem>
<subitem>
<subitem/>
<subitem/>
</subitem>
</item>
</itemlist>