xsl:将列表转换为二维表
假设我有这个XML节点:
<items>
<item>...<item>
<item>...<item>
<item>...<item>
<item>...<item>
<item>...<item>
...
</items>
哪里有Nitem
个节点。
现在我想将它转换为一个包含4列的HTML表。 (例如,如果N = 12,则有3个完整行,如果N = 27,则有7行,最后有3个单元)
我怎么能这样做?
我的直觉就是这样做,其中{{something}}
是我不知道如何实现的:
<xsl:template match="items">
<table>
<xsl:call-template name="partition-items">
<xsl:with-param name="skip" select="0" />
</xsl:call-template>
</table>
</xsl:template>
<xsl:template name="partition-items">
<xsl:param name="skip" />
{{ if # of items in current node > $skip,
output a row,
and call partition-items($skip+4)
}}
<xsl:template />
我不知道如何实现的部分是
如何制作谓词来测试当前节点中的item
元素
如何获取当前节点中的第N个item
元素
从评论更新
如何用空填充最后一行
<td />
元素使每一行
包含完全想要的细胞?
没有找到相关结果
已邀请:
4 个回复
妊辽剁茧
测试输入:
输出:
请注意:您可以动态传递列号。 附加要求和编辑。
它可以应用于上一个示例或这个简洁的XML:
结果将是:
请注意: 当
元素少于列数时,硬编码数据添加元素。 额外的硬编码元素,如果列数将改变。 如果元素数量不会少于列数,则可以使用相同的谓词和不同的
应用于
元素。 最后编辑。用循环计数。
郡晒景沧
当此转换应用于以下XML文档时:
产生了想要的正确结果:
说明: 每行所需的单元数在外部/全局参数
中指定。 模板仅应用于top元素的子元素,其位置是新行的开头 - 它们由表达式
生成,其中$ k可以是任何整数。 处理每个行起始项的模板创建一行(
元素),并在其中以特殊模式
为
应用模板。 在模式
中匹配
的模板只创建一个单元格(
元素),并在其内部输出匹配的
元素的字符串值。 II。 XSLT 2.0解决方案:
应用于与以前相同的XML文档,此转换产生相同的正确结果。 说明:
指令用于选择不同的
元素组,其中每个组包含必须在一行中表示的元素。 标准XPath 2.0运算符
用于此目的。 XSLT 2.0函数
包含必须在当前行中显示的所有项。
姬第柔炒
使用@ Flack的答案输入,输出:
咖哀烈