使用XSLT获取XML属性以获取HTML上的href

时间:2018-12-29 12:20:51

标签: html xml xslt

我在做家庭项目时遇到了这个问题,老实说,我不知道如何解决。

目标是使用XSLT从我的XML中获取某个属性并将其添加到 href

<Video videoID="v0001" imageLink="IMG/VIDEO_IMG/v0001_img.jpg"/>

然后,通过应用XSLT,看起来像这样:

<xsl:template match="/">
    <xsl:for-each select="Video"/>
    <a href="X">
        <img src="Y"/>
    </a>
</xsl:template>

其中X是XML中的imageLink,而Y将是该单个视频的XHTML页面的本地链接。

<!--The goal is getting something like this after using XSLT-->
<a href="VIDEOS/video_v0001.xhtml">
    <img class="User" src="../IMG/VIDEO_IMG/v0001_img.png" alt="VideoImage"/>
</a>

1 个答案:

答案 0 :(得分:0)

假设您的XML输入是:

<?xml version="1.0" encoding="UTF-8"?>
<Videos>
  <Video videoID="v0001" imageLink="IMG/VIDEO_IMG/v0001_img.jpg"/>
  <Video videoID="v0002" imageLink="IMG/VIDEO_IMG/v0002_img.jpg"/>
</Videos>

然后执行任务的XSLT脚本可以是:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
  <xsl:output method="xhtml" doctype-public="-//W3C//DTD XHTML 1.1//EN"
    doctype-system= "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
    encoding="UTF-8" indent="yes" />

  <xsl:template match="/">
    <html>
      <body>
      <xsl:for-each select="Videos/Video">
        <a href="VIDEOS/video_{@videoID}.xhtml">
          <img class="User" src="../{substring-before(@imageLink, '.')}.png"
            alt="VideoImage"/>
        </a>
      </xsl:for-each>
      </body>
    </html>
  </xsl:template>
</xsl:transform>

如您所见,应该有2个属性值模板{...}), 一个从源videoID属性中绘制内容,另一个- 来自imageLink

在第二种情况下,要复制的内容仅限于该部分 点号之前,因为在这种情况下文件扩展名是不同的。

请注意,我为method="xhtml"使用了doctype和两个XHTML属性 页。也许在您的情况下,它们应该有所不同。

有关工作示例,请参见http://xsltransform.net/jxWYjVH/1

要获得完整的HTML页面,请添加<head>标记和其他HTML内容 满足您的需求,例如User类的样式表。