XSLT解析包含转义和非转义字符的字符串(<和<)

时间:2013-03-06 21:26:07

标签: java html xml xslt xslt-1.0

在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;"会被完全删除。
  • 如果我将disable-output-escaping设置为“no”,则<字符会导致解析异常。

我可以做些什么来容纳两者?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

简单的答案(正如其他人提到但未直接说的那样!)是输入不是XML。 XSLT根本不会对该输入进行操作 - 您需要预先处理它,或者让生成它的任何系统得到修复,以便生成实际的XML而不是看起来像 XML的东西!

答案 2 :(得分:-1)

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

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