Java XSL到FO和HTML实体

Java XSL到FO和HTML实体,java,xslt,optimization,xsl-fo,html-encode,Java,Xslt,Optimization,Xsl Fo,Html Encode,我正在开发一个Java类,它通过XSLT文档将HTML字符串转换为FO字符串 然后,FOP处理生成的FO字符串以创建PDF文件 问题是,当FOP发现一个特殊字符时,我会得到一个错误: (e.g.) The entity "ldquo" was referenced, but not declared. 现在我的解决方案是用Unicode引用替换所有这些特殊字符 在本例中,““变为”“;“ 我可以在XSLT文件中声明这些实体,而不必执行无数的StringUtils.repl

我正在开发一个Java类,它通过XSLT文档将HTML字符串转换为FO字符串

然后,FOP处理生成的FO字符串以创建PDF文件

问题是,当FOP发现一个特殊字符时,我会得到一个错误:

(e.g.) The entity "ldquo" was referenced, but not declared.
现在我的解决方案是用Unicode引用替换所有这些特殊字符

在本例中,
““
变为
”“;“

我可以在XSLT文件中声明这些实体,而不必执行无数的StringUtils.replaceAll()


使用JTidy和setXmlOut解决(true)


那么,如何将HTML输入提供给XSLT呢?要么确保它是格式良好的XHTML,所有引用的实体都在DOCTYPE中正确声明,要么使用HTML5解析器,比如,而不是XML解析器。您声明“通过XSLT文档转换HTML”,但XSLT不能读取HTML文件,它只能读取XML文件。如果您正在将HTML转换为XML,那么您已经解决了这个问题,因为XML是正确的。您要传递给XSLT处理器的文件是什么?我告诉我的学生,要使用XSLT处理HTML信息,我首先使用W3C Tidy工具将其转换为XHTML,然后使用实体解析器调用Saxon,用于W3C DTD片段解析实体。感谢G.Ken Holman。如何使用实体解析器调用Saxon?我已经尝试使用JTidy清理html,然后使用Saxon自定义EntityResolver。我经常遇到这样的错误:“publicId和systemId之间需要空格”使用JTidy和setXmlOut(true)解决。谢谢