2013-05-30 4 views
0

У меня есть этот 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> 

ответ

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> 
+0

Это не правильно, потому что 'd_1' неверно. Это не проблема, если бы я мог сохранить результаты этого цикла в переменной, потому что тогда я мог бы исключить их. Также 'group_by' ->' group-by' –

+0

Ваше текстовое описание в вашем вопросе гласит: «Я бы хотел выбрать элементы, которые заканчиваются только _1 или _2». Так почему же 'd_1' не правильный? Я отредактирую, чтобы исправить 'group_by' в' group-by', извините. –

+0

Извините, если это не ясно, но, как вы можете видеть вывод, который я хочу получить, не включает 'd_1'. Я улучшу описание. –

Смежные вопросы