如何在没有标签的情况下选择 HTML 标签中的文本(JSoup)
Posted
技术标签:
【中文标题】如何在没有标签的情况下选择 HTML 标签中的文本(JSoup)【英文标题】:How to select text in HTML tag without a tag around it (JSoup) 【发布时间】:2016-10-25 19:39:12 【问题描述】:我想选择强标签内的文本,但它下面没有 div...
有没有可能直接用 jsoup 做到这一点?
我的选择尝试(不起作用,选择强标签内的全部内容):
Elements selection = htmlDocument.select("strong").select("*:not(.dontwantthatclass)");
HTML:
<strong>
I want that text
<div class="dontwantthatclass">
</div>
</strong>
【问题讨论】:
【参考方案1】:看看 jsoup 处理它的各种方法https://jsoup.org/apidocs/org/jsoup/nodes/Element.html。您可以使用remove()
、removeChild()
等。
您可以做的一件事是使用正则表达式。
这是一个匹配开始和结束标记的示例正则表达式,还附加了</br>
标记
https://www.debuggex.com/r/1gmcSdz9s3MSimVQ
所以你可以这样做
selection.replace(/<([^ >]+)[^>]*>.*?<\/\1>|<[^\/]+\/>/ig, "");
您可以进一步修改此正则表达式以匹配您的大多数情况。
您可以做的另一件事是,使用 javascript 或 vbscript 进一步处理您的变量:-
Elements selection = htmlDocument.select("strong")
这里的jquery代码:-
var removeHTML = function(text, selector)
var wrapped = $("<div>" + text + "</div>");
wrapped.find(selector).remove();
return wrapped.html();
通过正则表达式,您可以使用 jsoup 的 ownText() 方法来获取和删除不需要的字符串。
【讨论】:
【参考方案2】:您正在寻找ownText() 方法。
String txt = htmlDocument.select("strong").first().ownText();
【讨论】:
你的回答比我的好:)【参考方案3】:我猜你正在使用 jQuery,所以你可以在你的“strong”元素上使用“innerText”属性:
var selection = htmlDocument.select("strong")[0].innerText;
https://jsfiddle.net/scratch_cf/8ds4uwLL/
PS:如果你想将检索到的文本包装成一个“强”标签,我认为你必须构建一个新元素,如$('<strong>retrievedText</strong>');
【讨论】:
以上是关于如何在没有标签的情况下选择 HTML 标签中的文本(JSoup)的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有 IOB 标签的情况下使用 Hugging Face 的转换器管道重建文本实体?