XML - XSL样式表问题

时间:2013-01-06 19:56:29

标签: xml xslt

    <?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="vehicles.xsl"?>

<!-- File Name : vehicles.xml -->

<data>
    <params>
        <returned_page>1</returned_page>
        <total_pages>6</total_pages>
        <items_count>56</items_count>
        <previous_page></previous_page>
        <next_page>2</next_page>
    </params>
    <grid>
        <row>
            <car_id>1</car_id>
            <car_name>Audi A1</car_name>
            <car_price_per_day>75.33</car_price_per_day >
            <car_availability>1</car_availability>
        </row>
        <row>
            <car_id>2</car_id>
            <car_name>IQ 30</car_name>
            <car_price_per_day>45.99</car_price_per_day >
            <car_availability>1</car_availability>
        </row>
        <row>
            <car_id>3</car_id>
            <car_name>BMW 320</car_name>
            <car_price_per_day>86.44</car_price_per_day >
            <car_availability>0</car_availability>
        </row>
        <row>
            <car_id>4</car_id>
            <car_name>Ford Fiesta</car_name>
            <car_price_per_day >54.68</car_price_per_day>
            <car_availability>0</car_availability>
        </row>
        <row>
            <car_id>5</car_id>
            <car_name>Volkswagen Scirocco</car_name>
            <car_price_per_day >65.99</car_price_per_day >
            <car_available >0</car_available >
        </row>
    </grid>
</data>





 <?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="1.0"
xmlns:xsl="htp://www.w3.org/1999/XSL/Transform">

<!-- File Name : vehicles.xsl -->

<xsl:template match="/">
    <html>
        <body>
            <h2>CARS</h2>
            <table border="1">
                <tr bgcolor="#9acd32">
                    <th>ID</th>
                    <th>Name</th>
                    <th>Price/Day</th>
                    <th>Availability</th>
                </tr>
            <xsl:for-each select="row">
                <tr>
                    <td>
                        <xsl:value-of select="car_id"/>
                    </td>
                    <td>
                        <xsl:value-of select="car_name"/>
                    </td>
                    <td>
                        <xsl:value-of select="car_price_per_day"/>
                    </td>
                    <td>
                        <xsl:value-of select="car_availability"/>
                    </td>
                </tr>
            </xsl:for-each>
            </table>
        </body>
    </html>
</xsl:template>
</xsl:stylesheet>

我的探险家都没有打开样式表。找不到它有什么问题我尝试了另一种编码,“值选择”命令的完整路径,“数据”和“行”作为模板匹配但输出相同。 我试过ie,mozila firefox和谷歌chrome chrome给了我一个空白页面,即单行中的xml文件和firefox“加载样式表时出错:解析XSLT样式表失败”。 任何想法?

1 个答案:

答案 0 :(得分:3)

您的xslt以

开头
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="1.0"
xmlns:xsl="htp://www.w3.org/1999/XSL/Transform">

结束
</xsl:stylesheet>

与开头标记不匹配。

开始标记在变换URI中也有拼写错误。

如果您将开头更改为

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

运行样式表时不再出错。

然而,通过这么多的修复,它仍然无法正常工作,因为行

        <xsl:for-each select="row">

找不到行。这是因为“row”标签不在根目录下。

将此更改为

        <xsl:for-each select="data/grid/row">

使您的转换至少适用于显示的数据。

可能还有其他一些改进,但这可以让你达到功能转换的目的。

这些变化的整个转换是

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<!-- File Name : vehicles.xsl -->

<xsl:template match="/">
    <html>
        <body>
            <h2>CARS</h2>
            <table border="1">
                <tr bgcolor="#9acd32">
                    <th>ID</th>
                    <th>Name</th>
                    <th>Price/Day</th>
                    <th>Availability</th>
                </tr>
            <xsl:for-each select="data/grid/row">
                <tr>
                    <td>
                        <xsl:value-of select="car_id"/>
                    </td>
                    <td>
                        <xsl:value-of select="car_name"/>
                    </td>
                    <td>
                        <xsl:value-of select="car_price_per_day"/>
                    </td>
                    <td>
                        <xsl:value-of select="car_availability"/>
                    </td>
                </tr>
            </xsl:for-each>
            </table>
        </body>
    </html>
</xsl:template>
</xsl:stylesheet>

使用xsltproc对其进行测试会产生合理的输出,对我而言,它在Firefox 17.0.1中看起来也很好。