【发布时间】:2011-06-10 02:30:20
【问题描述】:
我正在使用 XSLT 将 XML 转换为 HTML。我无法弄清楚如何处理嵌入的 XML 节点以进行格式化。例如,假设我有 XML 元素:
<favoriteMovie>the <i>Star Wars</i> saga</favoriteMovie>
但是,在 XLST 期间,<i> 标记被忽略,因此 HTML 输出中的“星球大战”不是斜体。有没有相对简单的方法来解决这个问题?
test.xml:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="test.html.xsl"?>
<favoriteMovies>
<favoriteMovie>the <i>Star Wars</i> saga</favoriteMovie>
</favoriteMovies>
test.html.xsl:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" omit-xml-declaration="yes" />
<xsl:template match="/">
<html>
<head />
<body>
<ul>
<xsl:for-each select="favoriteMovies/favoriteMovie">
<li><xsl:value-of select="." /></li>
</xsl:for-each>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
【问题讨论】:
-
好问题,+1。有关问题原因的解释以及两个完整而简短的解决方案,请参阅我的答案。请注意,当前接受的答案是完全错误的。将标记放入 CDATA 部分会将其转换为不可用的一维文本,通常被认为是一种不好的做法。
-
@Dimitre Novatchev,除非绝对没有必要将该 html 视为结构化的,并且其唯一目的是按原样传递给浏览器,而不会使用任意 html 破坏原始 XML 结构标签。
-
在相互判断之前,让我们先了解一下。请详细说明“被破坏的标记”,我没有关注你。
-
@etranger:你可以很容易地找到为什么破坏标记是不好的做法——只需搜索。您可以从以下内容开始:xml.silmaril.ie/cdata.html,但您可以轻松找到许多其他来源。
-
这里的代码pastie.org/1468206 产生了这个输出dl.dropbox.com/u/16517379/xslt-ss.png,我似乎无法理解为什么标记被“破坏”了。本质上:提供的解决方案有效,最初由 OP 标记为有效。我也有我的论据。让我们谈谈并清除它。
标签: html xml xslt formatting