抱歉我的英文。
我写了XML样本:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="./test.xslt"?>
<document>
<paragraph id="p1">
I like <i>the flowers</i>!!!
</paragraph>
<paragraph id="p2">
<![CDATA[I like <i>the people</i>!!!]]>
</paragraph>
</document>
我为它编写了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"/>
<xsl:template match="/">
<html>
<body>
<p>
<xsl:value-of select="/document/paragraph[@id='p1']"/>
<br/>
<xsl:value-of select="/document/paragraph[@id='p2']"/>
</p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
我在文本值中指定了格式(&lt; i&gt;一些文字&lt; / i&gt;)。但格式不会发生。我在浏览器中得到了下一个结果:
I like <i>the flowers</i>!!!
I like <i>the people</i>!!!
如何强制应用指定的格式?
此致
答案 0 :(得分:1)
这是一个经常被问到的问题。
浏览器将文本显示为已销毁的标记(例如序列化为转义字符串表示形式) - 这正是解释转义字符的方式。)
为了达到所需的格式,请不要破坏标记。
而不是:
I like <i>the flowers</i>!!!
使用:
I like <i>the flowers<i>!!!
另外,替换:
<xsl:value-of select="/document/paragraph[@id='p1']"/>
使用:
<xsl:copy-of select="/document/paragraph[@id='p1']/node()"/>
总结:
使用此XML文档:
<document>
<paragraph id="p1">
I like <i>the flowers</i>!!!
</paragraph>
<paragraph id="p2">I like <i>the people</i>!!!</paragraph>
</document>
并将转换更改为此:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<body>
<p>
<xsl:copy-of select="/document/paragraph[@id='p1']/node()"/>
<br/>
<xsl:copy-of select="/document/paragraph[@id='p2']/node()"/>
</p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
这会产生想要的正确结果:
<html>
<body>
<p>
I like <i>the flowers</i>!!!
<br>I like <i>the people</i>!!!
</p>
</body>
</html>
,它会在浏览器中显示:
我喜欢鲜花 !!!
我喜欢人民 !!!
答案 1 :(得分:0)
我很难理解上面在评论中出现的讨论,因为我很难理解英语,而且我在XSL中仍然无法理解。对我来说使用''disable-output-escaping =“yes”''的选项似乎简单方便。 'xsl:copy-of'选项对我来说也很有趣,我很感激。