【发布时间】:2019-11-06 14:29:34
【问题描述】:
我想比较两个使用 Jsoup 表示为字符串的 HTML 文档,忽略空格中的任何差异。
简化示例:
@Test
public void testCompare() {
Document doc1 = Jsoup.parse("<html><body><div>Hello</div>\n</body></html>");
Document doc2 = Jsoup.parse("<html><body><div>Hello</div>\n</body>\n</html>");
System.out.println("Document 1");
System.out.println("----------");
for (Node node : doc1.body().childNodes()) {
printNode(node);
}
System.out.println();
System.out.println("Document 2");
System.out.println("----------");
for (Node node : doc2.body().childNodes()) {
printNode(node);
}
assertTrue("HTML documents are different", doc1.hasSameValue(doc2));
}
private void printNode(Node node) {
String text = node.getClass().getSimpleName();
if (node instanceof TextNode) {
TextNode textNode = (TextNode) node;
text += ": '" + textNode.getWholeText().replaceAll("\n", "\\\\n") + "'";
}
System.out.println(text);
}
这两个文档的唯一区别是第二个文档中body标签之后的新行。
body 标签中生成的子节点不同。第一个文档有一个元素节点和一个文本节点(包含一个新行)。第二个文档包含相同的两个节点,但有一个包含另一个新行的附加文本节点。 这个额外的文本节点可能是文档规范化的结果(将正文标记之外的文本节点移动到正文,请参阅 Document#normalise 的 Javadoc)。 Node#hasSameValue 使用 outerHtml 来处理单个文本节点中的后续空格,但不会跨越两个不同的连续空格。
我怎样才能做到这一点?
如果有更好的替代方案可以达到相同的目标,则该解决方案不得使用 Jsoup。
【问题讨论】:
-
HTML 与否,你有 2 个字符串。也许你可以使用这个:stackoverflow.com/questions/18344721/…
标签: java html comparison jsoup