我在做家庭项目时遇到了这个问题,老实说,我不知道如何解决。
目标是使用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>
答案 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
类的样式表。