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]")
上找到更多详细信息
在 Titus 建议使用正则表达式后,我决定也编写正则表达式来删除开头的 divs。
所以我将 Jsoup 文档转换为字符串,然后对字符串进行解析,然后转换回 Jsoup 文档,这样我就可以使用 Jsoup 函数了。
ADD:我所做的是解析两个页面并将其无缝连接到一个页面。所以没有丢失打开 div 或关闭...所以我的 HTML 代码保持没有错误因此我能够将它转换回 Jsoup 文档而不会出现并发症。
你好,我现在用谷歌搜索了几个小时,找不到答案......(或接近答案) 我想做的是,假设我有这段代码(非常简单):
<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]")
在 Titus 建议使用正则表达式后,我决定也编写正则表达式来删除开头的 divs。 所以我将 Jsoup 文档转换为字符串,然后对字符串进行解析,然后转换回 Jsoup 文档,这样我就可以使用 Jsoup 函数了。
ADD:我所做的是解析两个页面并将其无缝连接到一个页面。所以没有丢失打开 div 或关闭...所以我的 HTML 代码保持没有错误因此我能够将它转换回 Jsoup 文档而不会出现并发症。