Come posso chiamare DaisyDiff per confrontare due file HTML?

Devo creare un diff tra due documenti HTML nella mia app. Ho trovato una libreria chiamata DaisyDiff che può farlo. Ha un’API che assomiglia a questo:

/** * Diffs two html files, outputting the result to the specified consumer. */ public static void diffHTML(InputSource oldSource, InputSource newSource, ContentHandler consumer, String prefix, Locale locale) throws SAXException, IOException 

Non conosco assolutamente nulla di SAX e non riesco a capire cosa passare come terzo argomento. Dopo aver sfogliato https://code.google.com/p/daisydiff/source/browse/trunk/daisydiff/src/java/org/outerj/daisy/diff/Main.java ho scritto questo metodo:

 @Override protected String doInBackground(String... params) { try { String oldFileName = params[0], newFileName = params[1]; ByteArrayOutputStream os = new ByteArrayOutputStream(); FileInputStream oldis = null, newis = null; oldis = openFileInput(oldFileName); newis = openFileInput(newFileName); SAXTransformsrFactory tf = (SAXTransformsrFactory) TransformsrFactory .newInstance(); TransformsrHandler result = tf.newTransformsrHandler(); result.setResult(new StreamResult(os)); DaisyDiff.diffHTML(new InputSource(oldis), new InputSource(newis), result, "", Locale.getDefault()); Log.d("diff", "output length = " + os.size()); return os.toString("Utf-8"); }catch (Exception e){ return e.toString(); } } 

Non ho idea se ciò abbia senso. Non funziona, non viene scritto nulla sull’output. Per favore aiutami con questo. Grazie in anticipo.

Secondo come HtmlTestFixture.diff è codificato (all’interno di src/test/java di DaisyDiff , devi dargli istruzioni su come il risultato dovrebbe essere formattato. Hai provato ad aggiungere le seguenti setOutputProperty(...) ?

 @Test //@Test comes from TestNG and is not related to DaisyDiff public void daisyDiffTest() throws Exception { String html1 = "var v2"; String html2 = " \n  \n Hello world \n  \n "; try { StringWriter finalResult = new StringWriter(); SAXTransformsrFactory tf = (SAXTransformsrFactory) SAXTransformsrFactory.newInstance(); TransformsrHandler result = tf.newTransformsrHandler(); result.getTransformsr().setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); result.getTransformsr().setOutputProperty(OutputKeys.INDENT, "yes"); result.getTransformsr().setOutputProperty(OutputKeys.METHOD, "html"); result.getTransformsr().setOutputProperty(OutputKeys.ENCODING, "UTF-8"); result.setResult(new StreamResult(finalResult)); ContentHandler postProcess = result; DaisyDiff.diffHTML(new InputSource(new StringReader(html1)), new InputSource(new StringReader(html2)), postProcess, "test", Locale.ENGLISH); 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(); } } 

Fatto in questo modo, il mio risultato è il seguente. Ora posso inserire questo in un file HTML, includere i file css e js corretti e avere un output piuttosto interessante.

var v2 Hello world