2017-01-11 8 views
0

XSLTの特定の表のセルに画像を埋め込みたいが、それは動作しないようだ。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に新たなんだ、私を支援してください。

+0

XMLで画像の名前が決まりますか?それは 'gameCover'要素のピクチャ属性ですか? –

答えて

3

これは普遍的(IE、クロム、および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要素が不完全など)。

これは、いくつかの問題を引き起こす可能性があります。