我的HTML中有这样的标记:
<p class="outter">
<strong class="inner">not needed message</strong>
NEEDED MESSAGE
</p>
我正在尝试提取“需要的消息”
但如果我这样做:
String results = document.select("p.outter").text();
System.out.println(results);
打印:
不需要消息NEEDED MESSAGE
所以问题是:
如何从内部代码中获取特定标记没有文本的文本?
答案 0 :(得分:1)
一种解决方案可能只选择TextNode
元素。在下面找到一个小片段。
String html = "<p class=\"outter\">\n"
+ " <strong class=\"inner\">not needed message</strong>\n"
+ " NEEDED MESSAGE\n"
+ "</p>";
Document doc = Jsoup.parse(html);
Elements elements = doc.select("p.outter");
for (Element element : elements) {
// as mentioned by luksch
System.out.println("ownText = " + element.ownText());
// or manually based on the node type
for (Node node : element.childNodes()) {
if (node instanceof TextNode) {
System.out.println("node = " + node);
}
}
}
输出
node =
node = NEEDED MESSAGE
因此您需要根据您的要求过滤输出。例如。跳过空的。
答案 1 :(得分:1)
选择段落后,您可以使用ownText()
。实施例
package com.stackoverflow.answer;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import org.jsoup.nodes.Element;
public class HtmlParserExample {
public static void main(String[] args) {
String html = "<p class=\"outter\"><strong class=\"inner\">not needed message</strong>NEEDED MESSAGE</p>";
Document doc = Jsoup.parse(html);
Elements paragraphs = doc.select("p");
for (Element p : paragraphs)
System.out.println(p.ownText());
}
}
答案 2 :(得分:1)
使用Jsoup的ownText()方法:
String results = document.select("p.outter").ownText();
System.out.println(results);