XSL。按照数据文本中指定的格式显示文本

时间:2012-04-07 12:23:49

标签: xslt

抱歉我的英文。

我写了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>

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

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

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

此致

2 个答案:

答案 0 :(得分: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>

,它会在浏览器中显示

          

              我喜欢鲜花 !!!            
我喜欢人民 !!!       

   

答案 1 :(得分:0)

我很难理解上面在评论中出现的讨论,因为我很难理解英语,而且我在XSL中仍然无法理解。对我来说使用''disable-output-escaping =“yes”''的选项似乎简单方便。 'xsl:copy-of'选项对我来说也很有趣,我很感激。