java - Jsoup在带有许多标签的标签后选择文本
问题描述
我想使用jsoup在每个文本之后提取一个文本。有什么方法可以选择吗?
示例代码如下:
<div class="content">
<div name="panel-summary" id="summary">
<p>
<strong>A: </strong>*thank you* **I want to retrieve this text**<br>
<strong>B: </strong>*Bla..bla* *I don't want this text*<br>
<strong>C: </strong>*what ever text* *I dont want this*
<strong>D: </strong>*anythinh text* *I want this*<br>
<strong>E: </strong>*Bla..bla* *I don't want this text*t<br>
<strong>F: </strong>*anythinh text* *I want this*<br>
</p>
<p>I want this</p>
完成后,它会创建自动 id 示例 id=123
解决方案
如果我们可以假设<strong>
您要查找的所有元素将始终包含A:
orD:
或F:
然后strong:matchesOwn(regex)
(其中正则表达式将表示A:|D:|F:
),我们可以选择这些元素。
处理后strong
我们可以继续第二个<p>
并通过text()
.
String html = "<div class=\"content\">\n" +
"<div name=\"panel-summary\" id=\"summary\">\n" +
" <p>\n" +
" <strong>A: </strong>*thank you* **I want to retrieve this text**<br>\n" +
" <strong>B: </strong>*Bla..bla* *I don't want this text*<br>\n" +
" <strong>C: </strong>*what ever text* *I dont want this* \n" +
" <strong>D: </strong>*anythinh text* *I want this*<br>\n" +
" <strong>E: </strong>*Bla..bla* *I don't want this text*t<br>\n" +
" <strong>F: </strong>*anythinh text* *I want this*<br>\n" +
" </p>\n" +
"\n" +
" <p>I want this</p>";
Document doc = Jsoup.parse(html);
Elements pElements = doc.select("#summary p");
Elements strongElements = pElements.first().select("strong:matchesOwn(A:|D:|F:)");
for (Element strong : strongElements) {
System.out.println(strong.nextSibling());//get next element, including textual element
}
System.out.println("---");
System.out.println(pElements.get(1).text());//textual content of <p>I want this</p>
输出:
*thank you* **I want to retrieve this text**
*anythinh text* *I want this*
*anythinh text* *I want this*
---
I want this
如果您不想依赖内容,<strong>
而只是依赖其索引,则选择所有这些,例如
Elements allStrElemens = doc.select("#summary p strong");
并简单地通过他们的索引选择你需要的(记住索引从 0 开始),比如
System.out.println(allStrElemens.get(0).nextSibling());
System.out.println(allStrElemens.get(3).nextSibling());
System.out.println(allStrElemens.get(5).nextSibling());
推荐阅读
- spotipy - Spotipy 不使用缓存来存储令牌
- android - ViewPager2:使用假拖动和 PageTransformer 时滚动不稳
- firebase - Vue 中的 Firebase 配置文件动态导入
- c# - 无法在 Selenium Webdriver 中检索没有标签的元素的文本
- javascript - js:从数组中替换对象属性名称调用
- java - 如何将文本响应绑定到 json 并将对象放在 micronaut 的声明性客户端上?
- python-3.x - HTML-PARSING 并使用 python 从网页中获取链接
- flutter - Flutter:“pr.dismiss”无法在进度对话框中定义
- javascript - 如何使用 typescript 通过 node js 加载 wasm 模块?
- html - 如果直接在带有按钮的 HTML 中,引导模式可以完美工作,但如果它包含在具有动态输入的 React 组件中,则不会响应