在 DaisyDiff 中获取 NULL 指针异常 net.sf.saxon.event.ReceivingContentHandler.startElement

Getting NULL pointer exception net.sf.saxon.event.ReceivingContentHandler.startElement in DaisyDiff

我正在使用 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 将以不可预知的方式失败。

发布异常的堆栈跟踪可能会有用。