4
<xsl:for-each select="./node [position() &lt;= (count(*) div 2)]">
    <li>foo</li>
</xsl:for-each>
<xsl:for-each select="./node [count(*) div 2 &lt; position()]">
    <li>bar</li>
</xsl:for-each>

私のリストには 12 個のノードがありますが、2 番目のリストは常に 8 で、最初のリストは常に 4 です。

4

4 に答える 4

7

を実行するcount(*)と、現在のノードがnode処理中の要素になります。count(current()/node)またはlast()(望ましい)、または変数の中間点を計算して、パフォーマンスを向上させ、コードをより明確にする必要があります。

<xsl:variable name="nodes" select="node"/>
<xsl:variable name="mid" select="count($nodes) div 2"/>
<xsl:for-each select="$nodes[position() &lt;= $mid]">
  <li>foo</li>
</xsl:for-each>
<xsl:for-each select="$nodes[$mid &lt; position()]">
  <li>bar</li>
</xsl:for-each>
于 2008-08-29T07:28:45.817 に答える
2

last()現在のコンテキストのサイズを取得する関数を使用してみてください。

<xsl:for-each select="./node [position() &lt;= last() div 2]">
   <li>foo</li>
</xsl:for-each>
<xsl:for-each select="./node [last() div 2 &lt; position()]">
   <li>bar</li>
</xsl:for-each>
于 2008-08-29T08:09:50.510 に答える
0

count(../ノード) を試してください。以下は、xsltproc XSLT プロセッサを使用して、テスト XML ファイル (ノード要素を持つ単純なノード ルート) で正しい結果を示します。

<xsl:for-each select="node[position() &lt;= (count(../node) div 2)]">
    ...
</xsl:for-each>
<xsl:for-each select="node[(count(../node) div 2) &lt; position()]">
    ...
</xsl:for-each>
于 2008-08-29T07:42:05.897 に答える
0

まったく確信が持てませんが、count(*)あなたが思っていることをしていないように思えます。これは、現在のノード リストのサイズではなく、現在のノードの子の数をカウントします。印刷して、12 ではなく 8 か 9 であることを確認していただけますか?

last()コンテキスト サイズを取得するために使用します。

于 2008-08-29T07:27:18.973 に答える