可能的最短這種變換之一:
<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對於一個好問題。因此,您將學會在像這樣的廣泛問題中重寫身份規則 - 這是一項非常強大的技術。 –