XSLT禁止输出转义,不转义字符<



在下面的样式表中:

<?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>
    <h1>Music Collection:</h1>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th>Title</th>
        <th>Artist</th>
      </tr>
      <tr>
        <td><xsl:value-of select="catalog/cd/title" disable-output-escaping="yes" /></td>
        <td><xsl:value-of select="catalog/cd/artist" /></td>
      </tr>
    </table> 
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

当使用以下HTML时,为什么不将&lt;转换为< ?

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<catalog>
    <cd>
        <title>Empire Burlesque &lt; </title>
        <artist>Bob Dylan</artist>
        <country>USA</country>
        <company>Columbia </company>
        <price>10.90</price>
        <year>1985</year>
    </cd>   
</catalog>

可以在这里测试输出。http://www.w3schools.com/xsl/tryxslt.asp?xmlfile=cdcatalog& xsltfile = tryxsl_value-of

编辑

这里是另一个不工作的例子

<xsl:for-each select="//productType"> 
<xsl:value-of select="." disable-output-escaping="yes" />
            <br></br>
</xsl:for-each> 

DOE <脱掉衣服。没有它,我可以看到<

disable-output-encoding是XSLT 1中的可选特性(在XSLT 2中已弃用),因此处理器可以忽略它。特别是在任何处理管道中,它几乎总是被忽略,其中XSLT的输出作为内存树(例如DOM节点)传递给后续应用程序,然后应用程序对XML进行序列化。d-o-e本质上是对XSLT序列化阶段的提示,在这样的处理管道中不使用XSLT序列化。

这是处理器相关的东西(我想说的一个bug) -使用。net XSLT处理器在Visual Studio我得到<如预期,我得到&lt;如果我删除disable-output-escaping="yes"

disable-output-escaping的效果取决于您正在使用的处理器和使用它的方式。你没有给我们足够的信息来回答这些问题。

更确切地说,你为什么要用它?你想解决什么问题?通常,当人们使用disable-output-escaping时,他们的处理方式是错误的——有更好的方法可用。在某些情况下,d-o-e是合适的,但这意味着您只能将样式表与支持它的处理程序一起使用,在您知道样式表的结果树被直接管道输送到序列化器而不是其他一些消耗树的过程中的管道中。

相关内容

  • 没有找到相关文章

最新更新