Xslt 如何使用xsl从给定的xml中获取第一个x引用

Xslt 如何使用xsl从给定的xml中获取第一个x引用,xslt,xpath,Xslt,Xpath,如何使用xslt从下面的xml中获取行元素的第一个x引用 下面是一个示例xml <document> <line> <name>MAR111</name> <value>1</value> </line> <line> <name>MAR111</name> <value>3

如何使用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>

MAR111
1.
MAR111
3.
MEA111
1.
MPR111
1.
MEA111
4.
MPR111
2.
例如,如果我想要前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>

MAR111
1.
MAR111
3.
MEA111
1.

提前感谢。

您可以测试
位置()

<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>

使用

/*/line[not(position() > $x)]
其中,
$x
必须是一个包含所需数量的要选择的“第一”元素的变量

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

注意事项

/*/line[not(position() > $x)]
这个问题是一个纯粹的XPath问题,因此有一个纯粹的XPath解决方案——XSLT根本没有必要