我想比较两个使用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标记之后的第二个文档中增加了新行。
体标记中产生的子节点不同。第一个文档有一个元素节点和一个文本节点(包含新行)。第二个文档包含相同的两个节点,但是有一个额外的文本节点包含另一个新行。这个额外的文本节点可能是文档规范化的结果(将正文标记之外的文本节点移动到正文,请参见文档#normalise的Javadoc)。Node#hasSameValue使用outerHtml,它将处理单个文本节点中的后续空白空间,但不跨越两个不同的连续空白空间。
我该如何实现这一点?
如果有更好的替代方案来实现相同的目标,则解决方案必须不使用JSoup。
我也有类似的要求。我是通过以下几点实现的,
如果将两个HTML都视为字符串,则可以执行以下操作:
Function<String, String> normalizer = (original) ->
original
.replaceAll("[\\s+]?\n+[\\s+]?", "") // remove newline chars
.replaceAll("(>)(\\s+)(<)", "$1$3") // remove white space between tags
.toLowerCase();
String html1 = normalizer.apply(doc1.html());
String html2 = normalizer.apply(doc2.html());
Assert.assertEquals("Both documents are identical", html1, html2);
但是,请记住,该测试只检查精确匹配。如果标记、属性或其他数据的顺序不同,则会失败。
问题内容: 在Java中,我想比较两个地图,如下所示,我们是否有现有的API可以做到这一点? 谢谢 问题答案: 我将使用Set的removeAll()功能来设置键的差异,以查找添加和删除的内容。可以通过使用设置为HashMap的条目进行设置差异来检测实际更改。Entry同时使用键和值实现equals()。 输出量
问题内容: 我有两个列表(不是Java列表,可以说两列) 例如 我想要一个返回多少个相同元素的方法。对于此示例,它应该为3,并且应该返回列表的相似值和不同的值。 如果是,我应该使用哈希图,然后用什么方法获得结果? 请帮忙 PS:这不是学校作业:)因此,如果您只是指导我就足够了 问题答案: 编辑 这是两个版本。一种使用,另一种使用 比较它们并从中创建您自己的版本,直到获得所需的内容。 这应该足以覆盖
请帮助我提供一个解决方案,通过使用SeleniumRubyWebDriver比较Web应用程序的两个URL中的两个图像是否相同(我的意思是每个图像中的内容都相同)。 例如:访问下面的网址时,我有一个小图像显示: 访问下面的URL时,我还有另一个图像: 我怎样才能比较这两个图像,看看他们是否是相同的使用Selenium Ruby WebDrive?任何建议都很感激。非常感谢。
问题内容: 给出测试代码: 我想检查两个给定的枚举是否包含相同的值。 也许有更优雅的方式做到这一点? 问题答案: 建立一组名称: 为此(考虑将以上内容提取到方法中)。 然后:
现在我希望从基于id的XPath生成唯一的基于类的XPath。Firepath生成的类XPath可能指向多个元素,而不是唯一的。但是firepath生成的id XPath总是唯一的,即指向单个元素。 所以,我正在尽可能地生成两个之间的映射。但我需要测试以下内容: 以确保我创建的类xpath对应于所需的DOM元素。任何帮助都将得到高度赞赏。我希望生成的xpath示例是: 目标是减少xpath的深度,