Jsoup - 从具有相同跨度 class 名称的 html 字符串中提取
Jsoup - Extract from html string with the same span class name
我还是 html 的新手。对于 Android 项目,我需要使用 jsoup 从 html 字符串中提取一些数据。结构是这样的。所有 span 标签都具有相同的 class 名称。我需要的数据介于两者之间。
<span class="head">a</span>
xxxx data xxxx
<span class="head">b</span>
xxxx data xxxx
<span class="head">c</span>
xxxx data xxxx
有什么办法可以提取出来吗?
您必须做两件事:
- select 您感兴趣的文本节点之前的所有元素,
- 使用
nextSibling
方法获取文本节点。
看看这个示例代码:
导入 org.jsoup.Jsoup;
导入 org.jsoup.nodes.Document;
导入 org.jsoup.nodes.Element;
导入 org.jsoup.nodes.TextNode;
public class JsoupExample {
public static void main(String[] args) {
String html = "<span class=\"head\">a</span>\n" +
"xxxx data xxxx\n" +
"<span class=\"head\">b</span>\n" +
"xxxx data xxxx\n" +
"<span class=\"head\">c</span>\n" +
"xxxx data xxxx";
Document document = Jsoup.parse(html);
for (Element span : document.select("span.head")) {
TextNode node = (TextNode) span.nextSibling();
assert "xxxx data xxxx".equals(node.text());
System.out.println(node.text());
}
}
}
它使用您的输入并显示两个步骤。
这里 document.select("span.head")
我们 select 所有具有 class head
的元素,然后我们使用 forEach(span -> {})
函数和 lambda 表达式迭代这些元素(这是Java8 个例子)。然后我们使用以下方法得到有趣的文本节点:TextNode node = (TextNode) span.nextSibling();
这里我们只是检查文本节点是否等于我们使用断言期望的值,我们只是将它显示到标准输出。
根据您的需要修改此代码示例。希望对你有帮助。
我还是 html 的新手。对于 Android 项目,我需要使用 jsoup 从 html 字符串中提取一些数据。结构是这样的。所有 span 标签都具有相同的 class 名称。我需要的数据介于两者之间。
<span class="head">a</span>
xxxx data xxxx
<span class="head">b</span>
xxxx data xxxx
<span class="head">c</span>
xxxx data xxxx
有什么办法可以提取出来吗?
您必须做两件事:
- select 您感兴趣的文本节点之前的所有元素,
- 使用
nextSibling
方法获取文本节点。
看看这个示例代码: 导入 org.jsoup.Jsoup; 导入 org.jsoup.nodes.Document; 导入 org.jsoup.nodes.Element; 导入 org.jsoup.nodes.TextNode;
public class JsoupExample {
public static void main(String[] args) {
String html = "<span class=\"head\">a</span>\n" +
"xxxx data xxxx\n" +
"<span class=\"head\">b</span>\n" +
"xxxx data xxxx\n" +
"<span class=\"head\">c</span>\n" +
"xxxx data xxxx";
Document document = Jsoup.parse(html);
for (Element span : document.select("span.head")) {
TextNode node = (TextNode) span.nextSibling();
assert "xxxx data xxxx".equals(node.text());
System.out.println(node.text());
}
}
}
它使用您的输入并显示两个步骤。
这里 document.select("span.head")
我们 select 所有具有 class head
的元素,然后我们使用 forEach(span -> {})
函数和 lambda 表达式迭代这些元素(这是Java8 个例子)。然后我们使用以下方法得到有趣的文本节点:TextNode node = (TextNode) span.nextSibling();
这里我们只是检查文本节点是否等于我们使用断言期望的值,我们只是将它显示到标准输出。
根据您的需要修改此代码示例。希望对你有帮助。