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

4

3 回答 3

2

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

于 2013-03-06T16:38:21.950 回答
1

这是与处理器相关的东西(我会说一个错误) - 在 Visual Studio 中使用 .NET XSLT 处理器,我得到<了预期的结果,&lt;如果我删除了,我得到了disable-output-escaping="yes"

于 2013-03-06T15:38:27.517 回答
0

禁用输出转义的效果取决于您使用的处理器以及您使用它的方式。你没有给我们足够的信息来回答这些问题。

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

于 2013-03-07T10:49:37.370 回答