Объединение предикатов в XPath - PullRequest
0 голосов
/ 29 сентября 2011

У меня есть такой XML-код:

<MT N="tag1" V="text"/>
<MT N="tag2" V="more text"/>
<MT N="tag3" V="other text"/>
<MT N="tag4" V="something cool"/>
<MT N="target_tag" V="i want this"/>
<MT N="target_tag" V="and this"/>

Я пытаюсь нацелиться на MT, где N=target_tag и по номеру (1 или 2).

Следующее не работает, несмотря на то, что я надеялся от этой ссылки :

<xsl:variable name="display" select="MT[@N = 'target_tag' and 2]/@V" />

Если я попробую это, я последовательно получу первый:

<xsl:variable name="display" select="MT[@N = 'target_tag']/@V" />

И если я попробую это, я последовательно получу второй тег MT (так что «больше текста» в этом примере):

<xsl:variable name="display" select="MT[2]/@V" />

Я тоже пытался без удачи:

<xsl:variable name="display" select="MT[2][@N = 'target_tag']/@V" />

Исходя из моих требований, мне нужно объединить их, чтобы при циклическом просмотре рекурсивной функции я мог показать сначала, затем второе, а затем третье.

Есть идеи, как их можно объединить?

Ответы [ 2 ]

1 голос
/ 30 сентября 2011

select="MT[@N = 'target_tag'][2]" должно работать.

0 голосов
/ 30 сентября 2011

Входной XML:

<root>
<MT N="tag1" V="text"/>
<MT N="tag2" V="more text"/>
<MT N="tag3" V="other text"/>
<MT N="tag4" V="something cool"/>
<MT N="target_tag" V="i want this"/>
<MT N="target_tag" V="and this"/>
</root>

XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="root">
        <xsl:for-each select="MT">
            <xsl:if test="@N = 'target_tag'">
                <xsl:value-of select="@V"/>
            </xsl:if>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

Выход:

Я хочу это и это

...