如何使用xslt获取xml的前半部分?

如何使用xslt获取xml的前半部分?,xml,xslt,xslt-1.0,Xml,Xslt,Xslt 1.0,我有以下xml: <root> <elements> <element> <data1>Foo</data1> <data2>Bar</data2> </element> <element> <data1>Foo1</data1> <data2>Bar1</data2> </el

我有以下xml:

<root>
 <elements>
  <element>
     <data1>Foo</data1>
     <data2>Bar</data2>
  </element>
  <element>
     <data1>Foo1</data1>
     <data2>Bar1</data2>
  </element>
  <element>
     <data1>Foo2</data1>
     <data2>Bar2</data2>
  </element>
  <element>
     <data1>Foo3</data1>
     <data2>Bar3</data2>
  </element>
 </elements>
</root>

福
酒吧
Foo1
Bar1
食物2
Bar2
Foo3
Bar3
我想在一个结构(html表)中获取列表的前半部分,在另一个结构中获取第二部分

我正在尝试:

<xsl:template match="root">
<xsl:variable name="set" select="elements/element" />
<xsl:variable name="count" select="count($set)" />
<xsl:for-each select="elements/element" >
  <xsl:if test="position() &lt; $count div 2" >
    <table>
        <xsl:apply-templates select="elements/element" />
    </table>
  </xsl:if>
  <xsl:else>
    <table>
        <xsl:apply-templates select="elements/element" />
    </table>
  </xsl:else>                      
</xsl:for-each>

我有两个问题: 1.对于每一个,不允许使用else。 2.除了计算元素和使用foreach之外,还有更好的解决方案吗?

您只需使用

<xsl:template match="root">
  <xsl:variable name="set" select="elements/element" />
  <xsl:variable name="count" select="count($set)" />

    <table>
        <xsl:apply-templates select="$set[position() &lt; $count div 2]" />
    </table>

    <table>
        <xsl:apply-templates select="$set[position() >= $count div 2]" />
    </table>


</xsl:template>

是的,我在发布帖子后马上意识到我可以与

<table>
<xsl:apply-templates select='documents/document[(position()+1) mod 2 = 0]' />
</table>
<table>
<xsl:apply-templates select='documents/document[(position()+1) mod 2 = 1]' />
</table>

我认为马丁的解决方案也应该奏效。我认为接受他的解决方案是公平的,即使我的解决方案不需要计算要素


注意:此解决方案不会解决原始问题。第一个表将不包含原始xml的前半部分,而是包含原始xml中偶数位置的数据。第二个表将包含奇数位置的数据。我的原始xml没有排序,因此这对我来说是可行的。

“我的xml不需要计算元素。”也许不需要,但它不符合您的要求:“在一个结构中获取列表的前半部分……在另一个结构中获取第二部分。”是的,这也是正确的。但是xml实际上并不是以任何方式排序的,所以我只希望一半在一个表中,另一半在另一个表中。但你是对的,如果我们要保持最初规定的要求,马丁的解决方案是正确的。这就是为什么他的答案仍然被选为解决方案。我只是说我们只知道问题中的内容。我同意并接受了给定问题的正确答案。这种讨论毫无意义,没有人攻击你;没有必要变得防御/敌对。