使用 xsl 从 xml 获取特定值
我有一个如下的 xml。
<?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="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
I have an xml as below.
<?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="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是一个完整、简短且简单的转换:
当应用于提供的 XML 文档时:
生成所需的正确结果:
This is a complete, yet short and easy transformation:
and when applied on the provided XML document:
the wanted, correct result is produced:
试试这个:
PS 请格式化您的帖子,因为 XSL 未显示。
Try this:
P.S. Please format your post, as the XSL is not showing.
主要问题是这个xsl:if语句
此时,上下文仍然是根节点,所以这一切所做的只是检查attribute元素的存在,你是实际上并没有将自己定位在节点上。因此,当您执行 xsl:value-of 时,您只是获取 XML 中的第一个值。
您可能应该尝试匹配 attribute 元素,而不是使用 xsl:if,如下所示
整个 XSLT 将如下所示
当应用于输入 XML 时,输出为如下所示:
注意 xsl:element 的使用,
这避免了在匹配模板中硬编码salience,如果您希望匹配模板中的其他元素,则使其更加通用。类似的时尚。
The main problem is this xsl:if statement
At this point, the context is still the root node, so all this does is checking the existing of an attibute element, you are not actually positioning yourself on the node. Thus, when you do the xsl:value-of you are simply getting the first value in the XML.
Instead of using an xsl:if, you should probably try matching the attribute element, like so
The whole XSLT would be as follows
When applied on your input XML, the output is as follows:
Note the use of xsl:element
This avoids having to hard-code salience in your matching template, making it more generic should you wish to match other elements in a similar fashion.