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 に答える