如何通过参数过滤节点,然后将position()!= 1应用于结果?

时间:2011-02-22 17:53:46

标签: xml xslt xpath

抱歉,我在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:请推荐在线xlst测试工具。

谢谢。

1 个答案:

答案 0 :(得分: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]