首页 / JAVA / java-Jsoup解析和嵌套标签
java-Jsoup解析和嵌套标签
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-Jsoup解析和嵌套标签,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2667字,纯文字阅读大概需要4分钟。
内容图文
![java-Jsoup解析和嵌套标签](/upload/InfoBanner/zyjiaocheng/656/999bbeb4f54b4b6cb8643bafd86c195e.jpg)
我正在学习Jsoup,并具有以下HTML:
[...]
<p style="..."> <!-- div 1 -->
Content
</p>
<p style="..."> <!-- div 2 -->
Content
</p>
<p style="..."> <!-- div 3 -->
Content
</p>
[...]
我使用Jsoup.parse()和文档select(“ p”)捕获“内容”(效果很好).但…
[...]
<p style="..."> <!-- div 1 -->
Content
</p>
<p style="..."> <!-- div 2 -->
Content
</p>
<p style="..."> <!-- div 3 -->
Content
<p style="..."></p>
<p style="..."></p>
</p>
[...]
在此场景中,我看到Jsoup.parse()将此代码转换为:
[...]
<p style="..."> <!-- div 1 -->
Content
</p>
<p style="..."> <!-- div 2 -->
Content
</p>
<p style="..."> <!-- div 3 -->
Content
</p>
<p style="..."> <!-- div 4 -->
</p>
<p style="..."> <!-- div 5 -->
</p>
[...]
如何使用Jsoup(div 3内的div 4& 5)保持嵌套段落的顺序?
添加示例:
HTML档案:
<html>
<head>
<title>Title</title>
</head>
<body>
<p style="margin-left:2em">
<span class="one">Text</span>
<span class="two"><span class="nest">Text</span></span>
<span class="three"></span>
</p>
<p style="margin-left:2em">
<span class="one">Text</span>
<span class="two"><span class="nest">Text</span></span>
<span class="three"></span>
</p>
<p style="margin-left:2em">
<span class="one">Text</span>
<span class="two"><span class="nest">Text</span></span>
<span class="three"></span>
<p style="margin-left:2em"></p>
<p style="margin-left:2em"></p>
</p>
</body>
</html>
Java代码:
Document doc = null;
doc = Jsoup.connect(URL_with_HTML).get();
System.out.println(doc.outerHtml());
返回:
<html>
<head>
<title>Title</title>
</head>
<body>
<p style="margin-left:2em"> <span class="one">Text</span> <span class="two"><span class="nest">Text</span></span> <span class="three"></span> </p>
<p style="margin-left:2em"> <span class="one">Text</span> <span class="two"><span class="nest">Text</span></span> <span class="three"></span> </p>
<p style="margin-left:2em"> <span class="one">Text</span> <span class="two"><span class="nest">Text</span></span> <span class="three"></span> </p>
<p style="margin-left:2em"></p>
<p style="margin-left:2em"></p>
<p></p>
</body>
</html>
是正确的吗?我使用的是Jsoup 1.6.1.我知道Jsoup应该返回嵌套的段落,而不是先前的返回.
解决方法:
嵌套的段落在HTML中不存在.从Jsoup implements the WHATWG HTML5 specification开始,上一段自动关闭:
> p标签会通过以下任意一种自动关闭:地址,商品,旁边,blockquote,div,dl,字段集,页脚,表格,h1,h2,h3,h4,h5,h6,标头,hgroup,hr,main ,菜单,nav,ol,p,pre,section,table或ul.因此,< p>< div>< / div>变成< p< / p> div< / div>.
>没有对应的开始标签的名称为p(即/ p)的结束标签是解析错误,并被< p>代替.因此< span> / span< / p>变为< span> / span< p>.
因此,jsoup是正确的,您的HTML无效.
请确保您理解HTML无效,因为您有太多< / p>而不是因为“嵌套”段落.无法嵌套,因为它们会自动关闭.但是后面的< / p>之所以过时,是因为“相应的”< p>之前已经自动关闭.
内容总结
以上是互联网集市为您收集整理的java-Jsoup解析和嵌套标签全部内容,希望文章能够帮你解决java-Jsoup解析和嵌套标签所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。