我有这个XML:
<table title = "Fuzzy Bunnies">
<tgroup cols = "2">
<tbody>
<colspec colname = "Bunny Name"></colspec>
<colspec colname = "Bunny Traits"></colspec>
<row>
<entry>
Bugs Bunny
</entry>
<entry>
Likes to mess with people. Known for saying "What's up, Doc?"
</entry>
</row>
<row>
<entry>
Easter Bunny
</entry>
<entry>
Brings candy and/or hides eggs on Easter.
</entry>
</row>
<row>
<entry>
Little Bunny Foo Foo
</entry>
<entry>
Used to pick up field mice and bop them on the head. Turned into a goon by the good fairy.
</entry>
</row>
<row>
<entry>
Roger Rabbit
</entry>
<entry>
Toon who was framed.
</entry>
</row>
<row>
<entry>
Peter Rabbit
</entry>
<entry>
Ridiculously cute. Loses his jacket and shoes stealing veggies.
</entry>
</row>
</tbody>
</tgroup>
</table>
和这个XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" />
<xsl:template match="@*|node()">
<html>
<head>
<style>
body{font-family:Arial;font-size:.95em;}
p{font-family:Arial;font-size:.95em;text-align:left;}
h1{font-size:1.25em;color:Navy;font-weight:bold;}
h2{font-size:1em;}
h3{font-size:.75em;font-weight:bold;}
.caption{font-weight:bold;text-align:center;}
.graphic{text-align:center;}
table{border-collapse:collapse;}
table,th,td{border:1px solid gray;}
th{color:white;background-color:Navy;}
td{font-size:.9em;}
</style>
</head>
<body>
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</body>
</html>
</xsl:template>
<xsl:template match = "table">
<table>
<tr>
<th colspan="2">Fuzzy Bunnies</th>
</tr>
<tr>
<th>Bunny Name</th>
<th>Bunny Traits</th>
</tr>
<xsl-apply-templates select = "row"/>
</table>
</xsl:template>
<xsl:template match = "row">
<tr>
<xsl:apply-templates select="entry"/>
</tr>
</xsl:template>
<xsl:template match = "entry">
<td>
<xsl:value-of select ="."/>
</td>
</xsl:template>
</xsl:stylesheet>
我想要一个HTML表格,其中包含模板中列出的标题,以及自己单元格中的每个条目。当我在Firefox或IE中打开文件时,我得到了表头,但没有内容。
有几点需要注意。一,这是一个较大的XML文档的一大块。我从XSLT中删除的唯一内容是不属于表的节点的模板。同样,对于XML,我将其简化为表格。另一个是XML是基于我无法更改的标准格式化的,因此任何更改都需要到XSLT。
我查看了其他表格问题,我认为这不是重复。
答案 0 :(得分:1)
你有非常奇怪的模式和选择表达式,例如为什么你想为所有节点match="@*|node()"
输出一个完整的HTML文档结构?通常,您希望对match="/"
或match="/*"
执行此操作。
至于问题,row
元素不是table
的子元素,而是嵌套在结构的下方,因此在<xsl-apply-templates select = "row"/>
模板中执行table
不会处理行,您需要select=".//row"
。
当然,你所拥有的部分可能存在更多问题&#34;切断XSLT的是不属于表格的节点的模板&#34;如果你不确定处理到达table
元素,然后永远不会使用模板。