我目前正在使用XSLT来清理和修改某些(导出的)HTML。到目前为止工作得很好。 ;)
但是我需要改变一个表,以便将tfoot复制到表外。
输入:(由Adobe Indesign导出):
<table>
<thead>
<tr>
<td>Stuff</td>
<td>More Stuff</td>
</tr>
</thead>
<tfoot>
<tr>
<td>Some footer things</td>
<td>Even more footer</td>
</tr>
</tfoot>
<tbody>
<tr>
<td>Stuff</td>
<td>More Stuff</td>
</tr>
</tbody>
</table>
我的预期输出:
<table>
<thead>
<tr>
<td>Stuff</td>
<td>More Stuff</td>
</tr>
</thead>
<tbody>
<tr>
<td>Stuff</td>
<td>More Stuff</td>
</tr>
</tbody>
</table>
<div class="footer">
Some footer things
Even more footer
</div>
我在XSL中做的第一件事就是复制所有内容:
<xsl:template match="*|@*">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
但下一步是什么?这甚至可以用XSLT吗?提前谢谢。
答案 0 :(得分:3)
尝试类似:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="table">
<xsl:copy>
<xsl:apply-templates select="thead"/>
<xsl:apply-templates select="tbody"/>
</xsl:copy>
<xsl:apply-templates select="tfoot"/>
</xsl:template>
<xsl:template match="tfoot">
<div class="footer">
<xsl:apply-templates select="tr/td/text()"/>
</div>
</xsl:template>
</xsl:stylesheet>
我不确定您要如何安排页脚div
的内容;您可能希望使用xsl:for-each
在文本节点之间插入分隔符。
另请注意,此处的结果不是格式良好的XML,因为它没有单个根元素。