-3
    <?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>

私のエクスプローラーは誰もスタイルシートを開きません..別のエンコーディング、「value-of select」コマンド、「data」および「rows」へのフルパスをテンプレートとして試しましたが、出力は同じでした。つまり、mozilla firefox と google chrome chrome を試してみましたが、空白のページが表示されます。つまり、xml ファイルが 1 行に表示され、firefox で「スタイルシートの読み込み中にエラーが発生しました: XSLT スタイルシートの解析に失敗しました。」何か案は?

4

1 に答える 1

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">

行が見つかりません。これは、「行」タグがルートの直下にないためです。

これを

        <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 でも問題なく表示されます。

于 2013-01-06T20:05:11.127 に答える