質問

<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ノードが多いのですが、二回目のリストは必ず8の初は4.何が悪い僕の選択?

役に立ちましたか?

解決

だけど、 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>

他のヒント

きは受け付けていません 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>

いながるように思えま count(*) だけ電源をオンにする"というお返事ありがとうございます。です。その数をカウントを子ノードではなく、サイズのノード一覧です。なおこのイベント内容を印刷することを確認で8または9の代わりに12?

使用 last() ンテキストの取得サイズです。

みカウント(../node).以下は正しい結果も試験XMLファイルを簡単にノードをルートとノードの要素)を使用し、xsltproc XSLTプロセッサー

<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>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top