2

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

提前致谢。

4

2 回答 2

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>
于 2013-01-04T16:49:43.850 回答
0

使用

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

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

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

请注意

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

于 2013-01-05T04:25:45.560 回答