【发布时间】:2018-01-15 12:07:18
【问题描述】:
所以,我目前正在努力实现一个能够区分两个 HTML 文件的差异化工具。我做了一些研究,最终使用了 DaisyDiff。由于这个工具现在似乎有点陈旧,我很难找到一些仍然有效的例子。我找到了this quesion on Stackoverflow,因为我不知道要传递什么作为第三和第四个参数,这很有帮助。我目前的实施状态:
String html1 = "<html class='foobar'>Hello</html>";
String html2 = "<html>Bye</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;
DaisyDiff.diffHTML(new InputSource(new StringReader(html1)), new InputSource(new StringReader(html2)), postProcess, null, Locale.GERMAN);
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();
}
问题是,它实际上只区分纯文本,但它完全从输入中删除了标记。例如,如果我将这两个字符串作为输入:
String first = "<div>Hello</div>"
String second = "<div>Bye</div>"
我希望这个输出:
<div><span class="removed">Hello</span><span class="added">Bye</span></div>
但我只得到这个:
<span class="removed">Hello</span><span class="added">Bye</span>
【问题讨论】: