java - 在 DaisyDiff 中获取 NULL 指针异常 net.sf.saxon.event.ReceivingContentHandler.startElement
问题描述
我正在使用 DaizyDiff 库来比较两个 html 文件。我编写了一个 java 代码来实现 DaizyDiff。但是在运行时我在 net.sf.saxon.event.ReceivingContentHandler.startElement 上得到了 NULL 指针异常
我在 SAXTransformerFactory 上尝试了多种方法,但我无法弄清楚
public static void daisyDiffTest() throws Exception {
String html1 = "<html><body>var v2</body></html>";
String html2 = "<html> \n <body> \n Hello world \n </body> \n </html>";
try {
StringWriter finalResult = new StringWriter();
SAXTransformerFactory tf = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
TransformerHandler result = tf.newTransformerHandler();
result.getTransformer().setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
result.getTransformer().setOutputProperty(OutputKeys.INDENT, "yes");
result.getTransformer().setOutputProperty(OutputKeys.METHOD, "html");
result.getTransformer().setOutputProperty(OutputKeys.ENCODING, "UTF-8");
result.setResult(new StreamResult(finalResult));
ContentHandler postProcess = result;
Locale val = Locale.ENGLISH;
DaisyDiff.diffHTML(new InputSource(new StringReader(html1)), new InputSource(new StringReader(html2)),
postProcess, "test", val);
System.out.println(finalResult.toString());
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
预期结果将是 HTML 文件中的差异。
解决方案
如果不知道 DaisyDiff 是什么,或者它叫什么,就很难知道。很有可能它没有经过测试或支持与 Saxon 一起使用。
在 SAX ContentHandler 中传递给 startElement() 事件的数据格式取决于 XML 解析器的配置选项,而当 Saxon 以这种方式作为 ContentHandler 调用时,问题是它无法发现哪些配置选项解析器正在使用。
如 Javadoc 文档中所述:http: //www.saxonica.com/documentation/index.html# !javadoc/net.sf.saxon.event/ReceivingContentHandler@startElement如果解析器发出的事件不对应适当配置的解析器会发出什么,ReceivingContentHandler 将以不可预知的方式失败。
发布异常的堆栈跟踪可能很有用。
推荐阅读
- circuits-framework - 是否可以在 python 电路组件中定义单例
- python - 在 PySpark 中使用 Scala 对象时出错
- sockets - 使用 golang 从连接到网络接口的原始套接字读取
- c++ - C++ 中什么时候需要模板参数?
- fortran - 在 Fortran 中传递带参数的外部函数
- visual-studio - Visual Studio(或 TFS)在 .config 文件中随机添加奇怪的位
- swift - macOS: Copy custom text to clipboard on Cmd-C
- heroku - 将我的 Heroku 应用程序从 Free 升级到 Hobby
- docker - 仅在一个 pod(多个 pod)中运行任务
- flutter - 如何动态制作相同大小的切换按钮