如何使用xsl从给定的xml中获取前x次出现

时间:2013-01-04 16:20:08

标签: xslt xpath

如何使用xslt

从下面的xml中获取第一次x次出现

以下是xml示例

 <document>
    <line>
        <name>MAR111</name>
        <value>1</value>
    </line>

    <line>
        <name>MAR111</name>
        <value>3</value>
    </line>
    <line>
        <name>MEA111</name>
        <value>1</value>
    </line>
    <line>
        <name>MPR111</name>
        <value>1</value>
    </line>
    <line>
        <name>MEA111</name>
        <value>4</value>
    </line>
    <line>
        <name>MPR111</name>
        <value>2</value>
    </line>
</document>

例如,如果我想要前3次出现,结果应为

 <document>
    <line>
        <name>MAR111</name>
        <value>1</value>
    </line>

    <line>
        <name>MAR111</name>
        <value>3</value>
    </line>
    <line>
        <name>MEA111</name>
        <value>1</value>
    </line>
 </document>

提前致谢。

2 个答案:

答案 0 :(得分:0)

您可以测试postition() ...

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="document">
        <xsl:copy>
            <xsl:apply-templates select="@*|line[3 >= position()]"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

答案 1 :(得分:0)

使用

/*/line[not(position() > $x)]

其中$x必须是包含要选择的“第一”元素的所需数量的变量。

或者,$x可以替换为所需的数字本身。

请注意

这个问题是一个纯粹的XPath问题,因此有一个纯XPath解决方案 - 根本不需要XSLT。