选择以某些后缀完全结束的项目

时间:2013-05-30 14:10:40

标签: xslt

我有这个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_1a_2没问题,但b_1b_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>

2 个答案:

答案 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)

您也可以使用结束功能。

http://www.xsltfunctions.com/xsl/fn_ends-with.html