可能的最短这种变换之一:
<xsl:stylesheet version="1.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()[not(@ref[not(starts-with(.,'prefix_'))])]|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
当所提供的XML文档施加:
<node name="a">
<element ref="bb" />
<element ref="cc" />
<element ref="prefix_dd" />
<element ref="prefix_ee" />
</node>
的希望,正确的结果产生:
<node name="a">
<element ref="prefix_dd"/>
<element ref="prefix_ee"/>
</node>
说明:修改身份规则。
什么是逻辑? –
本质上是'/ child :: node()[descendant :: node()/ @ * [starts-with(。,'prefix _')]]' – emdog4
+1对于一个好问题。因此,您将学会在像这样的广泛问题中重写身份规则 - 这是一项非常强大的技术。 –