2017-01-11 6 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, Chrome и Safari, но не Firefox), но вы можете получить URI сущности с unparsed-entity-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 является неполным и т. Д.).

Это может вызвать некоторые проблемы.