如何使用 xslt 缩进列表的 html 列表?
Posted
技术标签:
【中文标题】如何使用 xslt 缩进列表的 html 列表?【英文标题】:how to indent an html list of lists using xslt? 【发布时间】:2020-10-06 23:06:03 【问题描述】:如何在生成的 html 中同等缩进每个生成的“记录”节点?
xml:
<csv>
<record>
<entry>Reported_Date</entry>
<entry>HA</entry>
<entry>Sex</entry>
<entry>Age_Group</entry>
<entry>Classification_Reported</entry>
</record>
<record>
<entry>2020-01-26</entry>
<entry>Vancouver Coastal</entry>
<entry>M</entry>
<entry>40-49</entry>
<entry>Lab-diagnosed</entry>
</record>
<record>
<entry>2020-02-02</entry>
<entry>Vancouver Coastal</entry>
<entry>F</entry>
<entry>50-59</entry>
<entry>Lab-diagnosed</entry>
</record>
<record>
<entry>2020-02-05</entry>
<entry>Vancouver Coastal</entry>
<entry>F</entry>
<entry>20-29</entry>
<entry>Lab-diagnosed</entry>
</record>
<record>
<entry>2020-02-05</entry>
<entry>Vancouver Coastal</entry>
<entry>M</entry>
<entry>30-39</entry>
<entry>Lab-diagnosed</entry>
</record>
<record>
<entry>2020-02-11</entry>
<entry>Interior</entry>
<entry>F</entry>
<entry>30-39</entry>
<entry>Lab-diagnosed</entry>
</record>
<record>
<entry>2020-02-20</entry>
<entry>Fraser</entry>
<entry>F</entry>
<entry>30-39</entry>
<entry>Lab-diagnosed</entry>
</record>
<record>
<entry>2020-02-21</entry>
<entry>Fraser</entry>
<entry>M</entry>
<entry>40-49</entry>
<entry>Lab-diagnosed</entry>
</record>
<record>
<entry>2020-02-27</entry>
<entry>Vancouver Coastal</entry>
<entry>F</entry>
<entry>60-69</entry>
<entry>Lab-diagnosed</entry>
</record>
</csv>
xslt:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="csv">
<table style="width:100%">
<tr>
<th>Reported Date</th>
<th>HA</th>
<th>Sex</th>
<th>Age_Group</th>
<th>Classification_Reported</th>
</tr>
<xsl:apply-templates/>
</table>
</xsl:template>
<xsl:template match="record">
<tr>
<xsl:apply-templates/>
</tr>
</xsl:template>
<xsl:template match="entry">
<td>
<xsl:apply-templates/>
</td>
</xsl:template>
</xsl:stylesheet>
输出:
<html>
<body>
<ul>
<li>
<li>
<ul>
<li>Reported_Date</li>
</ul>
<ul>
<li>HA</li>
</ul>
<ul>
<li>Sex</li>
</ul>
<ul>
<li>Age_Group</li>
</ul>
<ul>
<li>Classification_Reported</li>
</ul>
</li>
<ul>
<li>Reported_Date</li>
</ul>
<ul>
<li>HA</li>
</ul>
<ul>
<li>Sex</li>
</ul>
<ul>
<li>Age_Group</li>
</ul>
<ul>
<li>Classification_Reported</li>
</ul>
<li>
<ul>
<li>2020-01-26</li>
</ul>
<ul>
<li>Vancouver Coastal</li>
</ul>
<ul>
<li>M</li>
</ul>
<ul>
<li>40-49</li>
</ul>
<ul>
<li>Lab-diagnosed</li>
</ul>
</li>
<ul>
<li>2020-01-26</li>
</ul>
<ul>
<li>Vancouver Coastal</li>
</ul>
<ul>
<li>M</li>
</ul>
<ul>
<li>40-49</li>
</ul>
<ul>
<li>Lab-diagnosed</li>
</ul>
<li>
<ul>
<li>2020-02-02</li>
</ul>
<ul>
<li>Vancouver Coastal</li>
</ul>
<ul>
<li>F</li>
</ul>
<ul>
<li>50-59</li>
</ul>
<ul>
<li>Lab-diagnosed</li>
</ul>
</li>
<ul>
<li>2020-02-02</li>
</ul>
<ul>
<li>Vancouver Coastal</li>
</ul>
<ul>
<li>F</li>
</ul>
<ul>
<li>50-59</li>
</ul>
<ul>
<li>Lab-diagnosed</li>
</ul>
<li>
<ul>
<li>2020-02-05</li>
</ul>
<ul>
<li>Vancouver Coastal</li>
</ul>
<ul>
<li>F</li>
</ul>
<ul>
<li>20-29</li>
</ul>
<ul>
<li>Lab-diagnosed</li>
</ul>
</li>
<ul>
<li>2020-02-05</li>
</ul>
<ul>
<li>Vancouver Coastal</li>
</ul>
<ul>
<li>F</li>
</ul>
<ul>
<li>20-29</li>
</ul>
<ul>
<li>Lab-diagnosed</li>
</ul>
<li>
<ul>
<li>2020-02-05</li>
</ul>
<ul>
<li>Vancouver Coastal</li>
</ul>
<ul>
<li>M</li>
</ul>
<ul>
<li>30-39</li>
</ul>
<ul>
<li>Lab-diagnosed</li>
</ul>
</li>
<ul>
<li>2020-02-05</li>
</ul>
<ul>
<li>Vancouver Coastal</li>
</ul>
<ul>
<li>M</li>
</ul>
<ul>
<li>30-39</li>
</ul>
<ul>
<li>Lab-diagnosed</li>
</ul>
<li>
<ul>
<li>2020-02-11</li>
</ul>
<ul>
<li>Interior</li>
</ul>
<ul>
<li>F</li>
</ul>
<ul>
<li>30-39</li>
</ul>
<ul>
<li>Lab-diagnosed</li>
</ul>
</li>
<ul>
<li>2020-02-11</li>
</ul>
<ul>
<li>Interior</li>
</ul>
<ul>
<li>F</li>
</ul>
<ul>
<li>30-39</li>
</ul>
<ul>
<li>Lab-diagnosed</li>
</ul>
<li>
<ul>
<li>2020-02-20</li>
</ul>
<ul>
<li>Fraser</li>
</ul>
<ul>
<li>F</li>
</ul>
<ul>
<li>30-39</li>
</ul>
<ul>
<li>Lab-diagnosed</li>
</ul>
</li>
<ul>
<li>2020-02-20</li>
</ul>
<ul>
<li>Fraser</li>
</ul>
<ul>
<li>F</li>
</ul>
<ul>
<li>30-39</li>
</ul>
<ul>
<li>Lab-diagnosed</li>
</ul>
<li>
<ul>
<li>2020-02-21</li>
</ul>
<ul>
<li>Fraser</li>
</ul>
<ul>
<li>M</li>
</ul>
<ul>
<li>40-49</li>
</ul>
<ul>
<li>Lab-diagnosed</li>
</ul>
</li>
<ul>
<li>2020-02-21</li>
</ul>
<ul>
<li>Fraser</li>
</ul>
<ul>
<li>M</li>
</ul>
<ul>
<li>40-49</li>
</ul>
<ul>
<li>Lab-diagnosed</li>
</ul>
<li>
<ul>
<li>2020-02-27</li>
</ul>
<ul>
<li>Vancouver Coastal</li>
</ul>
<ul>
<li>F</li>
</ul>
<ul>
<li>60-69</li>
</ul>
<ul>
<li>Lab-diagnosed</li>
</ul>
</li>
<ul>
<li>2020-02-27</li>
</ul>
<ul>
<li>Vancouver Coastal</li>
</ul>
<ul>
<li>F</li>
</ul>
<ul>
<li>60-69</li>
</ul>
<ul>
<li>Lab-diagnosed</li>
</ul>
</li>
</ul>
</body>
</html>
html 应该更符合“记录”节点列表的行列,在每条记录中都有一个带有文本的“条目”节点列表。这样每个记录的详细信息(例如日期等)都会缩进,并且每个记录的缩进相同。
【问题讨论】:
请发minimal reproducible example,而不是断章取义的sn-ps。 为此我缩短了xml
@michael.hor257k
在将 XSLT 应用到 XML 后,我没有看到任何缩进问题:xsltfiddle.liberty-development.net/naZYrpB 我也看不到收到的输出与问题中的输出之间有任何联系。
【参考方案1】:
缩进因一个 XSLT 处理器而异,您还没有告诉我们您使用的是哪一个,但是,使用这种 XML 输入,如果您将 <xsl:strip-space elements="*"/>
添加到样式表,您可能会获得更好的结果:this去掉源文档中可忽略的空白,这可能正在寻找到结果文档的方式。
【讨论】:
以上是关于如何使用 xslt 缩进列表的 html 列表?的主要内容,如果未能解决你的问题,请参考以下文章