xsl for-each:每 n 行添加代码块?
我正在尝试将一些代表图像库的 xml 转换为 html 表。 (必须使用 html 而不是 css 来完成)。 如何使用 xsl 每六列左右添加行分隔符?
我有这样的:
<xsl:for-each select="//email/gallery" >
<td>
<img>
<xsl:attribute name="src">
<xsl:value-of select="gallery-image-location"/>
</xsl:attribute>
<xsl:attribute name="alt">
<xsl:value-of select="gallery-image-alt"/>
</xsl:attribute>
</img>
</td>
<xsl:if test="????">
</tr>
<tr>
</xsl:if>
<xsl:for-each>
在 Javascript 中我会做类似的事情:
for (i=0; i<gallery.length; i++) {
htm += '<td><img src="' +
gallery[i].gallery-image-location +
'" alt="'+ gallery[i].gallery-image-alt +'"></td>';
if (i%6 == 5 && i != gallery.length-1) {
htm += '</tr><tr>';
}
}
I am trying to transform a bit of xml which represents an image gallery into an html table. (it must be done with html and not with css). How do I add the row break </tr><tr>
every six or so columns with xsl?
I have this:
<xsl:for-each select="//email/gallery" >
<td>
<img>
<xsl:attribute name="src">
<xsl:value-of select="gallery-image-location"/>
</xsl:attribute>
<xsl:attribute name="alt">
<xsl:value-of select="gallery-image-alt"/>
</xsl:attribute>
</img>
</td>
<xsl:if test="????">
</tr>
<tr>
</xsl:if>
<xsl:for-each>
In Javascript I would do something like:
for (i=0; i<gallery.length; i++) {
htm += '<td><img src="' +
gallery[i].gallery-image-location +
'" alt="'+ gallery[i].gallery-image-alt +'"></td>';
if (i%6 == 5 && i != gallery.length-1) {
htm += '</tr><tr>';
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在 XSLT 中则不然!
XSLT 处理节点,而不是标签。
这是位置分组的 XSLT 方式:
当此转换应用于以下 XML 文档时:
生成所需的正确结果:
In XSLT you don't!
XSLT processes nodes, not tags.
Here is the XSLT way of positional grouping:
when this transformation is applied on the following XML document:
the wanted, correct result is produced:
如果您使用的是 XSLT 2
If you are using XSLT 2
首先,假设您使用的是 XML 或 HTML 的输出格式,我认为您不能像
段那样放置不匹配的标签。 XSL(在这些模式下)不仅仅像使用 Javascript 那样生成字符串输出。 (不过我可能是错的。)
你在那里所做的事情与分页密切相关;您可能会查看分页脚本。
这是我的一个(未经测试的)建议:
哦,还有 IIRC,循环的内部也可以缩短一点:
这些花括号将帮助您在长脚本上保持理智。
First, assuming that you are using an output format of XML or HTML, I don't think you can place unmatched tags as your are with the
</tr><tr>
segment. XSL (in these modes) doesn't just produce string output the way you would with your Javascript. (I could be wrong about this though.)What you're doing there is closely related to paging; you might look at paging scripts.
Here's an (untested) suggestion from me:
Oh, and IIRC, the interior of the loop can be shortened a little bit too:
Those curly braces will help save your sanity on long scripts.