XSLT disable-output-escaping非转义字符<

时间:2013-03-06 15:26:09

标签: html xslt xslt-1.0

在以下样式表中:

<?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&lt;被剥夺了。没有它,我可以看到&lt;字符(使用XSLT 1.0)

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

这是与处理器相关的东西(我说的一个错误) - 在Visual Studio中使用.NET XSLT处理器我按预期得到<,如果我删除{{{},我会得到&lt; 1}}

答案 2 :(得分:0)

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

更有针对性,你为什么要使用它?你想解决什么问题?通常,当人们使用禁用 - 输出 - 转义时,他们会以错误的方式处理事情 - 有更好的方法可用。在某些情况下,doe是合适的,但这意味着你只能使用带有支持它的处理器的样式表,在一个管道中你知道样式表的结果树被直接传送到一个序列化器而不是一些其他树 - 消费过程。