如何在没有标签的情况下选择 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() 等。 您可以做的一件事是使用正则表达式。 这是一个匹配开始和结束标记的示例正则表达式,还附加了&lt;/br&gt; 标记 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:如果你想将检索到的文本包装成一个“强”标签,我认为你必须构建一个新元素,如$('&lt;strong&gt;retrievedText&lt;/strong&gt;');

【讨论】:

以上是关于如何在没有标签的情况下选择 HTML 标签中的文本(JSoup)的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 HTML 标签的情况下从数据库中获取数据?

如何在没有标签的 HTML 中选择文本

如何在没有 IOB 标签的情况下使用 Hugging Face 的转换器管道重建文本实体?

在不影响 html 标签的情况下替换文本中的空格

如何在不使用 UIWebView 的情况下在 iOS 10 中显示带有 HTML 标签的文本(使用 swift)

如何使用 Javascript 获取选定文本中的所有 HTML 选择标签?