XSLT,XML:不显示HTML表格内容

时间:2015-03-20 14:04:05

标签: html xml xslt

我有这个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。

我查看了其他表格问题,我认为这不是重复。

1 个答案:

答案 0 :(得分:1)

你有非常奇怪的模式和选择表达式,例如为什么你想为所有节点match="@*|node()"输出一个完整的HTML文档结构?通常,您希望对match="/"match="/*"执行此操作。

至于问题,row元素不是table的子元素,而是嵌套在结构的下方,因此在<xsl-apply-templates select = "row"/>模板中执行table不会处理行,您需要select=".//row"

当然,你所拥有的部分可能存在更多问题&#34;切断XSLT的是不属于表格的节点的模板&#34;如果你不确定处理到达table元素,然后永远不会使用模板。