JSOUP 仅删除关闭 and/or 打开 div

JSOUP Deleting closing and/or opening divs only

你好,我现在用谷歌搜索了几个小时,找不到答案......(或接近答案) 我想做的是,假设我有这段代码(非常简单):

<div id="one"><div id="two"><div id="three"></div></div></div>

我想做的是删除特定数量的元素,比方说其中的 2 个。所以结果将是:

<div id="one"><div id="two"><div id="three"></div>

或者我想删除这个开头元素(同样是特定数量的元素,让我们再说一遍)但不知道他们的全名(所以我们可以假设如果真名是 id="one_54486464" 我知道它一_ ... ) 所以删除后我得到这个结果:

<div id="three"></div></div></div>

任何人都可以建议实现此结果的方法吗?它不必包含 JSOUP,更好。欢迎使用更简单或更有效的方法:)(但我正在使用 JSOUP 来解析文档以达到我剩下的地步) 我希望我解释清楚,如果你有任何问题请问...谢谢 :)

编辑:我想删除的那些元素在 HTML 文档的最后(所以什么都没有,它们后面什么都没有,不是 body 标签 html 标签什么都没有...) 请保留 HTML 文档在整个代码中会有很多,我只想删除文档末尾的特定数量...

对于开头 div,这些在我的 HTML 文件的最开头,没有任何内容......所以我需要在不知道他们的具体 ID 的情况下从开头删除特定数量才刚刚开始。此外,此 div 在文档中的某处也已结束,我想将其保留在那里。

对于第一种情况,您可以获取元素的 html(使用 html() 方法)并对其使用一些 String 方法来删​​除它的几个结束标记。

示例:

e.html().replaceAll("(((\s|\n)+)?<\/div>){2}$","");

这将删除最后 2 个结束 div 标签,要更改要删除的标签数量,只需更改大括号 {n}

之间的数字

(这只是一个例子,可能不可靠,你应该使用其他一些String方法来决定丢弃哪些部分)

对于第二种情况,您可以 select 内部元素并向 it/them 添加一些额外的结束标记。

示例:

String s = e.select("#two").first().html() + "</div></div>";

对于 select 具有以某些 String 开头的 ID 的元素,您可以使用此 e.select("div[id^=two]")

您可以在 how to select elements here

上找到更多详细信息

在 Titus 建议使用正则表达式后,我决定也编写正则表达式来删除开头的 divs。 所以我将 Jsoup 文档转换为字符串,然后对字符串进行解析,然后转换回 Jsoup 文档,这样我就可以使用 Jsoup 函数了。

ADD:我所做的是解析两个页面并将其无缝连接到一个页面。所以没有丢失打开 div 或关闭...所以我的 HTML 代码保持没有错误因此我能够将它转换回 Jsoup 文档而不会出现并发症。