基本:使用XML和XSLT显示图像

时间:2017-07-14 20:34:05

标签: xml xslt

已经通过StackOverflow和其他网站查看了这个答案。

大多数问题涉及我没有使用的代码,我正在寻找一个简单形式的问题的答案。我想要并回答最基本,最简单的做这种事情的方法。这两个文件没有我在这里发布的了。所有文件,xml,xsl和图像都在同一目录中。

我的XML代码。

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

<root>
   <my_content>

      <p>IMAGE FOR TESTING XML ONLY</p>
      <image>
          sizes_1-6.gif
      </image>

    </my_content>
</root>

我的XSL文件

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

  <xsl:template match="root">

    <xsl:template match="image">
        <img src="{@image}"/>
        <xsl:apply-templates/>
    </xsl:template>


   </xsl:template>
</xsl:stylesheet>

2 个答案:

答案 0 :(得分:1)

您的XSLT有两种错误:

  • 禁止嵌套模板
  • 您的XPath表达式与您想要的节点不匹配,因为 您选择image/@image(属性节点)而不是正确的image/text()(文本值节点)。

因此,修复你们

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

<xsl:template match="/root">     
  <html>
    <body>
      <xsl:apply-templates/>
    </body>
  </html>
</xsl:template>

<xsl:template match="image">
  <img src="{normalize-space(text())}"/>     <!-- remove leading and trailing spaces as well -->
  <xsl:apply-templates/>
</xsl:template>

</xsl:stylesheet>

正如您所看到的,我还在img - 标记附近添加了最低限度的HTML。

答案 1 :(得分:0)

这是我的最终解决方案,它可以很好地工作 - 除了它打印图像旁边的图像文件的名称。仍在研究如何防止这种情况。

示例XML标记

<image-center>
    size_cat_1-6.jpg
</image-center>

<image-left>
    size_cat_7-10.gif
</image-left>

<image-right>
    size_cat_8-10.gif
</image-right>

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="image-center">
    <img src="{.}"/>
   <xsl:apply-templates/>
 </xsl:template>

<xsl:template match="image-left">
    <img src="{.}"/>
   <xsl:apply-templates/>
 </xsl:template>

<xsl:template match="image-right">
    <img src="{.}"/>
   <xsl:apply-templates/>
 </xsl:template>

</xsl:stylesheet>