0

对不起我的英语不好。

我写了 XML 示例:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="./test.xslt"?>
<document>
  <paragraph id="p1">
    I like &lt;i&gt;the flowers&lt;/i&gt;!!!
  </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>

我在文本值(<i>一些文本</i>)中指定了格式。但格式化不会发生。我在浏览器中得到下一个结果:

I like <i>the flowers</i>!!! 
I like <i>the people</i>!!!

如何强制应用指定的格式?

问候

4

2 回答 2

1

这是一个经常被问到的问题。

被破坏的标记(例如序列化为转义字符串表示)被浏览器显示为文本——这正是转义字符应该被解释的方式)。

为了实现所需的格式,不要破坏标记。

代替:

I like &lt;i&gt;the flowers&lt;/i&gt;!!!  

利用:

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>

它在浏览器中显示如下

我喜欢!!!
我喜欢!!!

于 2012-04-07T15:49:50.943 回答
0

我很难理解上面评论中的讨论,因为我对英语的理解很差,而且我对 XSL 的理解仍然很弱。对我来说,使用 ''disable-output-escaping="yes"'' 的选项似乎简单方便。'xsl:copy-of' 的选项对我来说也很有趣,我对此表示感谢。

于 2012-04-08T08:29:05.737 回答