java - Jsoup child 尺寸值不正确

标签 java html parsing dom jsoup

Jsoup 错误地计算了子进程的数量:

    Document document = Jsoup
            .parse(testString);

    Element div = document.select("div").first();
    Elements divChildren = div.children();
    System.out.println(divChildren.size());

例如,如果 testString =

<div><div><p>text1</p></div><p>text2</p></div>

<div><h1><p>text1</p></h1><p>text2</p></div>

然后 divChildren.size() = 2

如果测试字符串=

<div><p><p>text1</p></p><p>text2</p></div>

然后 divChildren.size() = 4

我做错了什么?

最佳答案

如果你看一下document解析后保存

String testString ="<div><p><p>text1</p></p><p>text2</p></div>";

你会看到

<html>
 <head></head>
 <body>
  <div>
   <p></p>
   <p>text1</p>
   <p></p>
   <p>text2</p>
  </div>
 </body>
</html>

@Rejesh pointed p不能包含其他 block 级元素,例如 p因此 Jsoup 通过关闭此类不正确的外部来防止它 p元素(用于打开标签和关闭标签的单独闭合)。对于你的情况

    <p><p>text</p></p>

将成为

<strong><p></p></strong><p>text1</p><strong><p></p></strong>

所以你的div

<div><p><p>text1</p></p><p>text2</p></div>

将被解析为

  <div>
   <p></p>
   <p>text1</p>
   <p></p>
   <p>text2</p>
  </div>

如您所见,有 4 个子级(两个空 p 和两个带有文本的 p)。

<小时/>

如果您想关闭此验证机制,您可以使用 XML 解析器而不是标准 HTML 解析器

String testString ="<div><p><p>text1</p></p><p>text2</p></div>";

Document document = Jsoup.parse(testString,"",Parser.xmlParser());
System.out.println(document);
Element div = document.select("div").first();
Elements divChildren = div.children();
System.out.println(divChildren.size());

现在将打印2

关于java - Jsoup child 尺寸值不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24342434/

相关文章:

javascript - Angularjs 网站没有在谷歌上建立索引

html - CSS如何居中::在伪元素之后

c++ - C++ 中的高性能 XML 解析

parsing - Go 解析器未检测到结构类型的文档注释

java - 从包含json数据的字符串中提取json数据

java - 为什么我的 CardView 不会出现在我的 fragment 中?

java - Spring 5 Java 配置设置默认配置文件

java - Jsoup、hashMap数据Key值

html - CSS 打印和@page 不工作

iOS项目的Swift Building IP 4地址类