Xml 用于将元素分解为集合的XSLT?
XSLT是按元素名将XML文档分成多个集合的好解决方案吗?例如,如果我的文档是:Xml 用于将元素分解为集合的XSLT?,xml,xslt,batch-file,Xml,Xslt,Batch File,XSLT是按元素名将XML文档分成多个集合的好解决方案吗?例如,如果我的文档是: <mydocument> <items> <item>one</item> <item>two</item> <item>three</item> <item>four</item> </items> </mydocument> 一 二 三 四 我想将其分为3组或更少
<mydocument>
<items>
<item>one</item>
<item>two</item>
<item>three</item>
<item>four</item>
</items>
</mydocument>
一
二
三
四
我想将其分为3组或更少,如:
<mydocument>
<items page="1">
<item>one</item>
<item>two</item>
<item>three</item>
</items>
<items page="2">
<item>four</item>
</items>
</mydocument>
一
二
三
四
有人能给我一个XSLT方法,或者更好的例子吗。这个转换:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="vSetSize" select="3"/>
<xsl:template match="/*/*">
<mydocument>
<xsl:for-each select=
"item[position() mod $vSetSize = 1]">
<items page="{position()}">
<xsl:copy-of select=
". | following-sibling::*
[not(position() >= $vSetSize)]"/>
</items>
</xsl:for-each>
</mydocument>
</xsl:template>
</xsl:stylesheet>
<mydocument>
<items page="1">
<item>one</item>
<item>two</item>
<item>three</item>
</items>
<items page="2">
<item>four</item>
</items>
</mydocument>
应用于提供的XML文档时,生成所需的结果:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="vSetSize" select="3"/>
<xsl:template match="/*/*">
<mydocument>
<xsl:for-each select=
"item[position() mod $vSetSize = 1]">
<items page="{position()}">
<xsl:copy-of select=
". | following-sibling::*
[not(position() >= $vSetSize)]"/>
</items>
</xsl:for-each>
</mydocument>
</xsl:template>
</xsl:stylesheet>
<mydocument>
<items page="1">
<item>one</item>
<item>two</item>
<item>three</item>
</items>
<items page="2">
<item>four</item>
</items>
</mydocument>
一
二
三
四
好问题(+1)。有关完整的解决方案,请参见我的答案。:)使用not(position()>=$vSetSize)
而不是position()<$vSetSize
,有什么原因吗?@David:没有原因,除了可读性——我尽量避免逃避“啊,是的,我忘了。请原谅n00b问题:)