将图像从XML插入XSL文档

Ibr*_*him 4 html xml xslt templates image

我想知道是否有任何方法可以使用元素或属性在XML文件中声明图像,然后在XSL文件中使用此图像将其输入到表中,而不必在XSL中创建表并输入图像逐个进入表格单元格.这是我当前的XML文档(不完整,因为我只是测试它).

<?xml version= "1.0"?>
<?xml-stylesheet type="text/xsl" href="stylesheet4.xsl"?>
    <countries>
        <country> 
            <countryname>United States</countryname>
            <countryflag>bg_locale.jpg</countryflag>
        </country>

        <country>
            <countryname>United Kingdom</countryname>
        </country>

        <country>
            <countryname>Deutschland</countryname>
        </country>
        </countries>
Run Code Online (Sandbox Code Playgroud)

这是我创建的XSL文件和我尝试使用的方法:

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

<xsl:template match="/countries">
<html>
<body bgcolor="black">

<div id="container" style="100%">

<div id="header" style="background-color:black; height:60px"></div>


<div id="content_container" align="center">
    <div id="content" align="left" style="background: url('bg_locale.jpg');height:845px;width:848px">
    Content goes here
    <img src="logo_timber.jpg" align="left"/><br/>
<br/>
<br/>
<br/>
<table border="1">

<tr>
<xsl:apply-templates/>
</tr>

</table>
</div>

</div>

</div>
</body>
</html>

</xsl:template>

<xsl:template match="country">
<tr><td><xsl:value-of select="countryflag"/></td></tr>
</xsl:template>

</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我已创建了一个表,并希望XSL从XML文件中获取图像,然后将其放置,以便每个countryflag图像逐个显示在表中.

Inf*_*nd' 5

这不是确切的解决方案,但我向您展示如何使用for-each复制不同的标志!

 <xsl:template match="/countries">
    <table>
      <xsl:for-each select="country">
        <tr>
          <td>
            <xsl:value-of select="countryname"/>
          </td>
          <td>
            <xsl:element name="img">
              <xsl:attribute name="src">
                <xsl:value-of select="countryflag"/>
              </xsl:attribute>
              <xsl:attribute name="align">left</xsl:attribute>
            </xsl:element>
          </td>
        </tr>
      </xsl:for-each>
    </table>
  </xsl:template>
Run Code Online (Sandbox Code Playgroud)

这将在不同的行中复制不同countryflag的值!

Ps:这只是一个示例代码!我没有检查是否存在countryflag.我假设它将永远存在..你需要在创建img标签之前检查countryflag是否存在/ null在更安全的结尾,否则它可能会创建带有src的img标记为null.

编辑:更简单的解决方案,没有<xsl:element>标签..

 <xsl:template match="/countries">
    <table>
      <xsl:for-each select="country">
        <tr>
          <td>
            <xsl:value-of select="countryname"/>
          </td>
          <td>
            <img src="{countryflag}" align="left"/>
          </td>
        </tr>
      </xsl:for-each>
    </table>
  </xsl:template>
Run Code Online (Sandbox Code Playgroud)