如何使用xslt获取xml的前半部分?
我有以下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
<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() < $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() < $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实际上并不是以任何方式排序的,所以我只希望一半在一个表中,另一半在另一个表中。但你是对的,如果我们要保持最初规定的要求,马丁的解决方案是正确的。这就是为什么他的答案仍然被选为解决方案。我只是说我们只知道问题中的内容。我同意并接受了给定问题的正确答案。这种讨论毫无意义,没有人攻击你;没有必要变得防御/敌对。