在XSLT中显示图像

时间:2017-01-11 17:20:43

标签: xml image entity xslt-1.0 embed

我想在 XSLT 中的某个表格单元格中嵌入图像,但似乎无法使其正常工作。

我在这里尝试了几件我发现的东西,但都没有奏效。我无法弄清楚如何选择图像,通过DTD中的实体嵌入并通过XSLT在浏览器中显示它。

输入XML:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE games [
<!ELEMENT games (name, charcteristics)>
<!ELEMENT game (name, gameNumber)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT gameNumber EMPTY>
<!ELEMENT gameCover (#PCDATA)>
<!ELEMENT characteristics (genre*,studio*,year*,review*)>
<!ELEMENT genre (#PCDATA)>
<!ELEMENT studio (#PCDATA)>
<!ELEMENT year (#PCDATA)>
<!ELEMENT review (#PCDATA)>
<!ATTLIST gameNumber gameID ID #REQUIRED>
<!ATTLIST genre gameNum1 IDREF #REQUIRED>
<!ATTLIST genre type (action|RPG|FPS|Puzzle) "action">
<!ATTLIST studio gameNum2 IDREF #REQUIRED>
<!ATTLIST studio studName (EA|Ubisoft|Gameloft|Bethesda) "EA">
<!ATTLIST gameCover picture ENTITY #IMPLIED>
<!ATTLIST gameCover format NOTATION (jpg|gif) #IMPLIED>
<!ENTITY FCp SYSTEM "upload.wikimedia.org/wikipedia/en/1/18/Far_Cry_Primal_cover_art.jpg" NDATA jpg>
<!NOTATION jpg PUBLIC "jpg viewer">
<!NOTATION gif PUBLIC "gif viewer"> ]>

<games>
    <game>
        <name>FarCry:Primal</name>
        <gameNumber gameID="qJCGc" />
        <gameCover picture="FCp" format="jpg"></gameCover>
        <year>2016</year>
        <review>lololo</review>
    </game>

    <characteristics>
        <genre gameNum1="qJCGc" type="FPS"></genre>
        <studio gameNum2="qJCGc" studName="Ubisoft"></studio>
    </characteristics>
</games>

XSLT:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <h1>
            <font face="" color="#EAC67A">XML Каталог за видеоигри</font>
        </h1>
        <table>
            <tr>
                <td>
                    <!-- Image should be here -->
                </td>
            </tr>
        </table>
    </xsl:template>
</xsl:stylesheet>

我是XML和XSLT的新手,请帮助我。

1 个答案:

答案 0 :(得分:3)

它不受普遍支持(在I.E.,Chrome和Safari中为我工作,但不适用于Firefox),但您可以使用unparsed-entity-uri()获取实体的URI:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="//game">
        <h1>
            <font face="" color="#EAC67A">XML Каталог за видеоигри</font>
        </h1>
        <table>
            <tr>
                <td>
                    <img src="{unparsed-entity-uri(gameCover/@picture)}"/>
                </td>
            </tr>
        </table>
    </xsl:template>
</xsl:stylesheet>

但是......我注意到源文档中存在一些问题。 URL未正确形成(无方案),DTD有错误(特征的拼写不一致,game元素不完整等)。

这可能会给你带来一些问题。