Java XSLT解析同时包含转义字符和非转义字符的字符串(<;和&;lt;)

Java XSLT解析同时包含转义字符和非转义字符的字符串(<;和&;lt;),java,html,xml,xslt,xslt-1.0,Java,Html,Xml,Xslt,Xslt 1.0,在XSLT1.0中,处理此xml元素的最佳方法是什么 <Product>This is a product. &lt; and its price is < 10</Product> 这是一个产品。价格

在XSLT1.0中,处理此xml元素的最佳方法是什么

<Product>This is a product. &lt; and its price is < 10</Product>
这是一个产品。价格<10美元

请注意,“小于号”表示两次。i、 e.作为
''和'我认为第一种方法(
禁用输出转义=“yes”
)是唯一的方法。否则会出现错误,不可能这样做


您必须找出如何防止(或修补)实体解析(
已解析并替换)

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

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

只有魔法,而不是黑色而不是白色。请只使用格式良好的XML。@kan所说的是,
XML无效(甚至格式错误)。XML要求
和#x3C或诸如此类)在解析的字符数据中。(与某些SGML应用程序不同,XML没有任何纯字符数据内容元素的概念。)您希望输出是什么样子。定义input1=>output1和input2=>output2It不是XML元素,因此不能用XSLT处理它。可能是因为建议的解决方案不起作用。禁用输出转义并不能神奇地使您能够解析格式错误的XML。@MichaelKay感谢您的响应,但有一个误解。建议的解决方案是使用
disable output escaping=“yes”
指令修补实体解析。我知道OP应该以某种方式整理XML,因为这是一个格式不正确的XML,但如果不可能,他可以通过这种解决方法来修复XML。我不认为有任何方法可以在XML解析器中“修补实体解析”以允许它接受未替换的
@MichaelKay,这取决于实现,我在10年前和Xalan/Xerces一起做的,所以这是可能的。我不确定当前的实现情况,尽管我认为这应该是可能的。
<?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>