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());
如何获得以下 '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());