【发布时间】:2017-06-29 11:09:13
【问题描述】:
我对 xslt 比较陌生,一直在尝试使用 xml 结构创建表,但我发现很难限制每行中的字段数量..
<report>
<status>
<statuscheck>
<node>node1</node>
<RAG>red</RAG>
<url>http://www.google.com</url>
<area>area1</area>
</statuscheck>
<statuscheck>
<node>node2</node>
<RAG>red</RAG>
<url>http://www.google.com</url>
<area>area1</area>
</statuscheck>
<statuscheck>
<node>node3</node>
<RAG>red</RAG>
<url>http://www.google.com</url>
<area>area1</area>
</statuscheck>
<statuscheck>
<node>node4</node>
<RAG>red</RAG>
<url>http://www.google.com</url>
<area>area1</area>
</statuscheck>
<statuscheck>
<node>node5</node>
<RAG>red</RAG>
<url>http://www.google.com</url>
<area>area1</area>
</statuscheck>
<statuscheck>
<node>node1</node>
<RAG>red</RAG>
<url>http://www.google.com</url>
<area>area2</area>
</statuscheck>
</status>
<area>
<area_name>area1</area_name>
<area_name>area2</area_name>
</area>
我有以下 xslt,但有没有办法让它在每 4 个项目后开始一个新行?实际的 xml 每个区域最多有 20 个组件。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<style>
</style>
</head>
<body style="font-family: Sky Text;">
<xsl:for-each select="/report/area/area_name">
<div style="font-size: 20px; font-weight: bold; margin: 10px 0 10px 0;"><xsl:value-of select="."/></div>
<table style="font-family: Sky Text; border-collapse: collapse; width: 960px;">
<tbody>
<xsl:variable name="active_area" select="./text()"></xsl:variable>
<xsl:for-each select="/report/status/statuscheck[area/text() = $active_area]">
<td style="width: 240px; border: 1px solid black; text-align: center;" valign="middle">
<xsl:attribute name="class">
<xsl:value-of select="RAG"/>
</xsl:attribute>
<div style="margin: 10px; font-size: 16px;">
<a>
<xsl:attribute name="href">
<xsl:value-of select="url"/>
</xsl:attribute>
<xsl:value-of select="node"/>
</a>
</div>
</td>
</xsl:for-each>
</tbody>
</table>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
提前致谢 加文
【问题讨论】:
-
看到XSLT 1.0 Grouping Key for different Nodes and Elements 有一个非常相似的问题。 Related search 有更多类似问题。
-
你有什么理由真的需要这张桌子吗?老实说,从您的 HTML 来看,您最好为每个
statuscheck创建一个 div 块,然后使用 CSS 进行布局。 -
谢谢.. 我对 html 很陌生,但是用谷歌搜索了 CSS 布局,看起来它可以满足我的需要.. 谢谢
-
这应该相当简单——只需将单个 div 设置为
display:inline(或者可能是display:inline-block),如果它们和包含的 div 具有适当的固定宽度,您应该最终得到四个行。