如何使用XSLT跳过列表中的第一种元素?

时间:2011-03-17 18:40:58

标签: xslt

我有一份笔记清单,如下:

<Notes>
    <Note>
        <Type>Internal</Type>
        <Value>STuff</Value>
    </Note>
    <Note>
       <Type>External</Type>
       <Value>Other stuff</Value>
    </Note>
    <Note>
       <Type>External</Type>
       <Value>Even More stuff</Value>
    </Note>
</Notes>

我需要列出外部注释,但跳过第一个外部注释。更糟糕的是,我不能总是保证内部注释的存在,所以我不一定知道第一个外部注释的位置。所以我想我需要找到第一个外部音符的位置,并将其存储在变量中,然后在测试中使用它。但不确定如何用变量做到这一点?

2 个答案:

答案 0 :(得分:1)

  

所以我想我需要找到这个位置   第一个外部笔记和商店   在变量中然后使用它   测试。

没有。您可以使用position()。怎么样:

<xsl:template match="Notes">
  <xsl:apply-templates select="Note[Type = 'External'][position() &gt; 1]" /> 
</xsl:template>

<xsl:template match="Note[Type = 'External']">
  <!-- now do something with that node -->
  <xsl:copy-of select="." />
</xsl:template>

答案 1 :(得分:1)

选择包含<Note>类型的第二个External

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="Notes/Note[Type='External'][position()&gt;1]">
        <xsl:apply-templates select="Value"/>
    </xsl:template>
    <!-- suppress -->
    <xsl:template match="Note"/>
</xsl:stylesheet>

当应用于您的示例XML时,会输出以下内容:

Even More stuff