XSLT1.0。。基于动态参数的图元分组
我尝试在XSLT1.0中进行分组XSLT1.0。。基于动态参数的图元分组,xslt,Xslt,我尝试在XSLT1.0中进行分组 <Sheets> <Sheet> <ROI>5350</ROI> <TPI>830</TPI> </Sheet> <Sheet> <ROI>5459</ROI> <TPI>830</TPI> </Sheet>
<Sheets>
<Sheet>
<ROI>5350</ROI>
<TPI>830</TPI>
</Sheet>
<Sheet>
<ROI>5459</ROI>
<TPI>830</TPI>
</Sheet>
<Sheet>
<ROI>5350</ROI>
<TPI>856</TPI>
</Sheet>
<Sheet>
<ROI>5678</ROI>
<TPI>856</TPI>
</Sheet>
<Sheet>
<ROI>17473</ROI>
<TPI>856</TPI>
</Sheet>
<Sheet>
<ROI>5350</ROI>
<TPI>857</TPI>
</Sheet>
<Sheet>
<ROI>5713</ROI>
<TPI>857</TPI>
</Sheet>
</Sheets>
5350
830
5459
830
5350
856
5678
856
17473
856
5350
857
5713
857
在我的xslt中,我想传递一个动态值,比如数字4。。。我希望我的xml将4个表元素分组到一个集合中,如
<Sheets>
<set>
<Sheet>
<ROI>5350</ROI>
<TPI>830</TPI>
</Sheet>
<Sheet>
<ROI>5459</ROI>
<TPI>830</TPI>
</Sheet>
<Sheet>
<ROI>5350</ROI>
<TPI>856</TPI>
</Sheet>
<Sheet>
<ROI>5678</ROI>
<TPI>856</TPI>
</Sheet>
</set>
<set>
<Sheet>
<ROI>17473</ROI>
<TPI>856</TPI>
</Sheet>
<Sheet>
<ROI>5350</ROI>
<TPI>857</TPI>
</Sheet>
<Sheet>
<ROI>5713</ROI>
<TPI>857</TPI>
</Sheet>
</set>
</Sheets>
5350
830
5459
830
5350
856
5678
856
17473
856
5350
857
5713
857
比如,把4张纸分成一组,另外4张分成一组,最后把其余的纸分成一组
我在group param中提供group元素
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0">
<xsl:output method="xml"/>
<xsl:param name="group" select="4"/>
<xsl:template match="/">
<xsl:variable name="num_of_loos" select="ceiling(count(//Sheet) div number($group))"/>
<root>
<xsl:call-template name="loop">
<xsl:with-param name="i">1</xsl:with-param>
</xsl:call-template>
</root>
</xsl:template>
<xsl:template name="loop">
<xsl:param name="i"/>
<xsl:if test="$i <= count(//Sheet)">
<set>
<xsl:for-each select="//Sheet[position() >= $i and position() < ($i + $group)]">
<xsl:copy-of select="."/>
</xsl:for-each>
</set>
<xsl:call-template name="loop">
<xsl:with-param name="i" select="$i + $group"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
1.
这是输出
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:xs="http://www.w3.org/2001/XMLSchema">
<set>
<Sheet>
<ROI>5350</ROI>
<TPI>830</TPI>
</Sheet>
<Sheet>
<ROI>5459</ROI>
<TPI>830</TPI>
</Sheet>
<Sheet>
<ROI>5350</ROI>
<TPI>856</TPI>
</Sheet>
<Sheet>
<ROI>5678</ROI>
<TPI>856</TPI>
</Sheet>
</set>
<set>
<Sheet>
<ROI>17473</ROI>
<TPI>856</TPI>
</Sheet>
<Sheet>
<ROI>5350</ROI>
<TPI>857</TPI>
</Sheet>
<Sheet>
<ROI>5713</ROI>
<TPI>857</TPI>
</Sheet>
</set>
</root>
5350
830
5459
830
5350
856
5678
856
17473
856
5350
857
5713
857
当您想将元素排列成一组特定的数字时,一种方法是首先选择每个集合中的第一个元素
<xsl:for-each select="Sheet[position() mod $num = 1]">
然后,您可以像这样选择集合中的元素(即,选择当前元素,以及根据所需数量选择其后面的元素)
试试这个XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:param name="num" select="'4'" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/Sheets">
<xsl:copy>
<xsl:for-each select="Sheet[position() mod $num = 1]">
<Set>
<xsl:apply-templates select="self::*|following-sibling::Sheet[position() < $num]" />
</Set>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
请注意,使用复制始终保持不变的元素。请将完整输出显示给我好吗?我无法显示上述内容。。基本上,我想把床单分组到数字中,我们传递动态银行Daniel,是的,这正是我想要的。我现在也更新了山谷
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:param name="num" select="'4'" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/Sheets">
<xsl:copy>
<xsl:for-each select="Sheet[position() mod $num = 1]">
<Set>
<xsl:apply-templates select="self::*|following-sibling::Sheet[position() < $num]" />
</Set>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>