我有以下 XML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<result name="response" numFound="10000" start="0">
<doc>
<str name="Title">Title 1</str>
<str name="GUID">IMG_1</str>
<str name="Desc">Desc 1</str>
</doc>
<doc>
<str name="Title">Title 2</str>
<str name="GUID">IMG_2</str>
<str name="Desc">Desc 2</str>
</doc>
</result>
</response>
我想将其转换为以下 HTML 文件:
<html>
<head> </head>
<body>
<table border="1">
<tr>
<td colspan="2">
{Title}
</td>
</tr>
<tr>
<td>
<img src="http://myserver/images/{GUID}">
</td>
<td>
{Desc}
</td>
</tr>
<tr>
<td colspan="2">
{Title}
</td>
</tr>
<tr>
<td>
<img src="http://myserver/images/{GUID}">
</td>
<td>
{Desc}
</td>
</tr>
</table>
</body>
</html>
应从 XML 文件中替换{}
中的内容。我很好奇如何使用 XSL 来做到这一点。我的尝试如下,但它出现 空白 ,即我得到表结构,但没有标题或的说明即可。
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' >
<xsl:output media-type="text/html; charset=UTF-8" encoding="UTF-8"/>
<xsl:template match='/'>
<html>
<head> </head>
<body>
<table border="1">
<xsl:apply-templates select="response/result/doc"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="doc">
<xsl:variable name="title" select="doc/str[@name='Title']"/>
<xsl:variable name="guid" select="doc/str[@name='GUID']"/>
<xsl:variable name="desc" select="doc/str[@name='Desc']"/>
<tr>
<td colspan="2">
<xsl:value-of select="$title"/>
</td>
</tr>
<tr>
<td>
<img src="http://myserver/images/{GUID}" />
</td>
<td>
<xsl:value-of select="$desc"/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
我很感激任何帮助,因为我是新手。
答案 0 :(得分:1)
xlst中只有一些小错误。
由于当前用于选择模板doc中变量的节点是doc元素,因此您必须删除doc/
。
<xsl:variable name="title" select="str[@name='Title']"/>
<xsl:variable name="guid" select="str[@name='GUID']"/>
<xsl:variable name="desc" select="str[@name='Desc']"/>
要将变量值添加到链接,请使用:
<img src="http://myserver/images/{$guid}" />
因此请尝试:
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' >
<xsl:output media-type="text/html; charset=UTF-8" encoding="UTF-8"/>
<xsl:template match='/'>
<html>
<head> </head>
<body>
<table border="1">
<xsl:apply-templates select="response/result/doc"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="doc">
<xsl:variable name="title" select="str[@name='Title']"/>
<xsl:variable name="guid" select="str[@name='GUID']"/>
<xsl:variable name="desc" select="str[@name='Desc']"/>
<tr>
<td colspan="2">
<xsl:value-of select="$title"/>
</td>
</tr>
<tr>
<td>
<img src="http://myserver/images/{$guid}" />
</td>
<td>
<xsl:value-of select="$desc"/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:1)
你几乎就在那里,你刚添加了一个额外的“doc /”
因为你正在使用
<xsl:template match="doc">
一切都与doc相关,所以你应该只
<xsl:variable name="title" select="str[@name='Title']"/>
<xsl:variable name="guid" select="str[@name='GUID']"/>
<xsl:variable name="desc" select="str[@name='Desc']"/>