我正在使用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文件中的差异。
答案 0 :(得分:1)
在不知道DaisyDiff是什么或它叫什么的情况下很难知道。很有可能尚未经过测试或不支持与Saxon一起使用。
在SAX ContentHandler中传递给startElement()事件的数据格式取决于XML解析器的配置选项,以这种方式将Saxon作为ContentHandler调用时的问题是它无法发现什么解析器正在使用的配置选项。
如此处Javadoc文档所述:http://www.saxonica.com/documentation/index.html#!javadoc/net.sf.saxon.event/ReceivingContentHandler@startElement,如果解析器发出的事件与适当配置的解析器发出的事件不对应,则ReceivingContentHandler将以无法预测的方式失败。
发布异常的堆栈跟踪可能很有用。