2

在 XSLT 1.0 中,处理这个 xml 元素的最佳方式是什么

<Product>This is a product. &lt; and its price is < 10</Product>

请注意,“小于号”表示了两次。即作为'&lt;' and '<'.

为了逃避<角色,我可以这样做

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" method="html" indent="yes" />
<xsl:template match="/">
  <html>
  <body>
    <table border="1">
      <tr>
        <th>Product</th>
      </tr>
      <tr>
        <td><xsl:value-of select="Product" disable-output-escaping="yes" /></td>
      </tr>
    </table> 
  </body>
  </html>
</xsl:template>

</xsl:stylesheet> 
  • 如果我将 disable-output-escaping 设置为“yes”,则<字符会正确显示,但会"&lt;"被完全删除。
  • 如果我将禁用输出转义设置为“否”,则该<字符会导致解析异常。

我能做些什么来允许两者?

4

3 回答 3

3

总的来说,我认为在 XSLT 1.0 中处理您的输入的最佳方式是使用其他一些工具将您的输入转换为 XML,然后正常处理它。XSLT 处理器在面对非 XML 输入时的行为往往是不稳定的。

于 2013-03-06T21:40:56.540 回答
1

简单的答案(正如其他人所暗示但没有直接说的!)是输入不是 XML。XSLT 根本无法处理该输入 - 您将需要对其进行预处理或修复生成它的任何系统,以便它生成实际的 XML 而不是看起来像XML 的东西!

于 2013-03-07T09:07:16.407 回答
0

我认为第一种方法 ( disable-output-escaping="yes") 是唯一的方法。否则你会得到一个错误,这是不可能的。

您必须弄清楚如何防止(或修补)实体解析(&lt;已解决并替换)。

于 2013-03-06T21:37:23.780 回答