0

これはXSLT を使用して最初の要素を選択するにはどうすればよいですか?のフォローアップです。.

<xml>
    <news>
        <newsitem>
            <dateCreated>2009-09-09</dateCreated>
            <summary>Something great happened</sumamry>
        </newsitem>
        <newsitem>
            <dateCreated>2009-09-08</dateCreated>
            <summary>Something bad happened</sumamry>
        </newsitem>
    </news>
    <news>
        <newsitem>
            <dateCreated>2009-09-07</dateCreated>
            <summary>Something really bad happened</sumamry>
        </newsitem>
    </news>
</xml>

newsitemドキュメントの最初の要素と照合するにはどうすればよいですか? xsl:template match="//newsItem[1]"他の質問で提案された一致は、最初の子を取得します。xsl:template match="(//newsItem)[1]"有効じゃない。私が得た他の唯一のヒントは、キーを使用して複雑で面倒なことを行うことです。より良い答えがあるはずです。

4

3 に答える 3

0

XSLT 1.0 では、次のように使用できます

newsitem[not(ancestor::newsitem or preceding::newsitem)]
于 2012-07-27T01:36:24.577 に答える
0

ドキュメント内の名前 newsitem の最初の要素を選択する単純な一致パターンはありません。述語でそれを行うことができます:

match="newsitem[not(preceding::newsitem)]"

しかし、パフォーマンスはひどいものになる可能性があります。

XSLT 2.0 での最善の解決策は、グローバル変数をバインドしてテストすることです。

<xsl:variable name="first-newsitem" select="(//newsitem)[1]"/>

<xsl:template match="newsitem[. is $first-newsitem]"/>
于 2012-07-26T22:25:04.060 に答える
0

質問を理解したら、次を使用する必要があると思います:

<xsl:template match="//news[1]/newsitem[1]"> to select the first item of all.
于 2012-07-26T16:27:20.040 に答える