Как отфильтровать узел по параметрам, а затем применить position ()! = 1 для результата? - PullRequest
2 голосов
/ 22 февраля 2011

Извините, но я настоящий нуб в 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][position() = 1]?

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

Спасибо.

1 Ответ

3 голосов
/ 23 февраля 2011

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

/*/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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...