给出以下XML示例文件:
<A>
<B>
<elem1 att1="SN:" att2="toto" att3="tata"/>
</B>
<B>
<elem1 att1="tata" att2="SN:" att3="toto"/>
</B>
<B>
<elem1 att1="toto" att2="tata" att3="SN:"/>
</B>
</A>
我想执行XSL转换以删除值等于&#34; SN:&#34;的属性,从而产生期望的输出:
<A>
<B>
<elem1 att2="toto" att3="tata"/>
</B>
<B>
<elem1 att1="tata" att3="toto"/>
</B>
<B>
<elem1 att1="toto" att2="tata"/>
</B>
</A>
当相同元素具有匹配属性时,我可以使用条件隔离元素,但是当我不知道哪个属性等于&#34; SN:&#34;时,我如何隔离元素? ?
也许更准确:我知道如何隔离像这样的元素如果att1值=&#34; SN:&#34;,然后删除它,但我怎么能只做如果attX值=&#34; SN:&#34;,然后将其删除。
我想删除它们以便我可以连接&#34; SN:&#34;与另一个元素的另一个值。
答案 0 :(得分:1)
只需使用 identity transform 模板将所有按复制,并通过将其与空模板匹配来禁止值为“SN:”的任何属性。
XSLT 1.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="@*[.='SN:']"/>
</xsl:stylesheet>