JSoup 获取文本而不在元素下包装标签

JSoup Getting Text Without Wrapping Tag Under an Element

如何获得以下 'Some random text',并用 span 包裹它?

例如我有以下元素:

<div>
    Some random text 1
    <a href="some_url">Go to Link</a>
</div>
<div>
    <span>Some random text 2</span>
    <a href="some_url">Go to Link</a>
</div>

我会有这样的东西:

<div>
    <span>Some random text 1</span>
    <a href="some_url">Go to Link</a>
</div>
<div>
    <span>Some random text 2</span>
    <a href="some_url">Go to Link</a>
</div>

你看,有些 div 已经用 span 包裹起来了,有些还没有。我只想包装那些还没有包装的。

这个快速解决方案可能对您有所帮助。我使用 jsoup v1.12.1

对其进行了测试

首先通过div标签找到所有元素,没有span:

   List<Element> elements = jsoupDocument
            .getElementsByTag("div")
            .stream()
            .filter(div -> div.getElementsByTag("span").isEmpty())
            .collect(Collectors.toList());

然后遍历找到的元素并更新它们,将其文本包装在 span 标签中:

    elements.forEach(div -> {
        // dissect element
        String text = div.ownText();
        Elements children = div.children();

        // clear any existing inner HTML and replace it with an empty String.
        div.text("");

        // put all elements back together and wrap the div text with the span tag
        div.prepend(String.format("<span>%s</span>", text));
        children.forEach(div::appendChild);
    });

    LOG.info(jsoupDocument.toString());