我有这个XML:
<items>
<item name="a_1"/>
<item name="a_2"/>
<item name="b_1"/>
<item name="b_2"/>
<item name="b_3"/>
<item name="c_1"/>
<item name="c_2"/>
<item name="d_1"/>
</items>
我想选择与_1
或_2
完全匹配的项目。例如,a_1
和a_2
没问题,但b_1
和b_2
不是,因为b_3
存在。 d_1
不正常,因为d_2
不存在。所以输出将是:
<items>
<item name="a_1"/>
<item name="a_2"/>
<item name="c_1"/>
<item name="c_2"/>
</items>
答案 0 :(得分:1)
使用XSLT 2.0,您可以先分组,然后查看every .. satisfies
:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:param name="wanted-suffixes" select="'1', '2'"/>
<xsl:template match="items">
<xsl:copy>
<xsl:for-each-group select="item" group-by="substring-before(@name, '_')">
<xsl:if test="count(current-group()) eq count($wanted-suffixes)
and (every $item in current-group() satisfies
(some $suffix in $wanted-suffixes satisfies ends-with($item/@name, $suffix)))">
<xsl:sequence select="current-group()"/>
</xsl:if>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)