Палец вверх 2
Перевод
Перевод

Как отфильтровать узел по параметрам, а затем применить position ()! = 1 для результата?

Извините, но я настоящий нуб в XPath. Вот мой вопрос. Давайте предположим, что у нас есть такая структура ...

<structure>
   <item filter=0>1 do not display</item>
   <item filter=1>2 display</item>
   <item filter=1>3 display</item>
   <item filter=0>4 do not display</item>
</structure>

Как применить structure[filter=1] фильтра structure[filter=1] и выбрать только первый элемент из полученных данных? Я полагаю, это будет что-то вроде structure[filter=1][position() = 1] ?

PS: Пожалуйста, порекомендуйте онлайн инструмент для тестирования.

Спасибо.

xml xslt xpath
задан Kirzilla 22 февр. 2011 г., 20:53:45
источник

1 ответ

Решение 3
Перевод
Перевод

Ты почти сделал это сам.

/*/item[@filter = 1][1]

Взгляните на этот пример (явное value-of для ясности):

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
    <xsl:template match="/">
        <xsl:value-of select="*/item[@filter = 1][1]"/>
    </xsl:template>
</xsl:stylesheet>

Результат против этого правильно сформированного входа:

<structure>
   <item filter="0">1 do not display</item>
   <item filter="1">2 display</item>
   <item filter="1">3 display</item>
   <item filter="0">4 do not display</item>
</structure>

Будет 2 display .

Чтобы выбрать все элементы, которые соответствуют условию @filter=1 , кроме первого из них, используйте это выражение xpath:

/*/item[@filter = 1][position() > 1]
ответ дан Flack 23 февр. 2011 г., 0:12:11
источник