0

请看一下 TransformerFactoryImpl 类中getAssociatedStylesheet(Source source, String media, String title, String charset) throws TransformerConfigurationException 的代码:

上述函数的定义忽略了我通过源参数(本质上是一个 SAXSource 对象)作为参数传入的 XMLReader。上面的函数是在创建一个新的 SAXParserFactory 对象之后创建一个新的 XMLReader。因此,我们面临的问题是,在解析输入 XML 文件时,它继续解析 DOCTYPE 部分和通过 Public ID 和 System ID 指定的外部 DTD。现在,由于我们的 XMLReader 不用于解析 XML 文件,因此不使用向 reader 注册的 EntityResolver,因此外部 DTD 未解析,因此 getAssociatedStylesheet 函数失败并出现异常。

但是,如果您查看其他函数public Templates newTemplates(Source source) throws TransformerConfigurationException in TransformerFactoryImpl class。此函数专门检查传入的源参数是否为 SAXSource,如果是,则如果 XMLReader 存在于源中,则它不会创建新的 XMLReader 对象。

这是一个错误吗?有什么想法吗?

XalanJ 版本:2.7.1 源文件路径:src\org\apache\xalan\processor\TransformerFactoryImpl.java

谢谢!苛刻的 Gupta Adob​​e 系统

4

2 回答 2

1

由于 Saxon 能够通过注册的自定义实体解析器完美地找到关联的样式表,因此每当使用 XalanJ 进行转换时,我们都使用 Saxon 来获取关联的样式表。

一旦我们获得相关的样式表,我们将输入文件和样式表传递给 Xalan 进行转换。

于 2014-05-25T10:57:02.547 回答
0

是的,我同意你的看法。这似乎违反了 SAXSource 类规范中固有的期望。

Saxon 实现使用提供的 XMLReader。

JDK Xalan 和 Apache Xalan 版本在这方面似乎是相同的。

于 2013-08-20T18:43:11.367 回答