[英]Java Jsoup : Extract all the text
我有下面的代碼。 doc.body.text()語句不輸出style和script標簽內的文本。 我閱讀了.text()函數代碼,它查找TextNode的所有實例。 什么是Jsoup中的TextNode。
以及為什么腳本文本未包含在.text()輸出中。
String contex = "<html><body><style>style</style><div>div</div><script>script</script><p>paragraph</p>body</body></html>";
Document doc = Jsoup.parse(contex, "UTF-8");
String text = doc.body().text();
System.out.println("Test text : " + text);
輸出:段落正文
為此,您需要使用org.jsoup.select.Elements
來解析<script>
類的標簽。
String contex = "<html><body><style>style</style><div>div</div><script>scripts</script><p>paragraph</p><p>body</p><script>787878</script></body></html>";
Document doc =Jsoup.parse(contex, "UTF-8");
Elements scriptElements = doc.getElementsByTag("script");
for (Element el :scriptElements ){
for (DataNode dn : el.dataNodes()) {
System.out.println(dn.getWholeData());
}
}
OP:
scripts
787878
以及為什么腳本文本未包含在.text()輸出中。
因為script
和style
具有數據 ,而不是文本 。
要從script
的數據中獲取數據,請使用getElementsByTag
Elements scriptElements = doc.getElementsByTag("script");
並通過getWholeData
訪問
for (Element element :scriptElements ){
for (DataNode node : element.dataNodes()) {
System.out.println(node.getWholeData());
}
System.out.println("-------------------");
}
根據源代碼 ,對於style
或script
標記,將其視為dataNode而不是textNode
void insert(Token.Character characterToken) { Node node; // characters in script and style go in as datanodes, not text nodes final String tagName = currentElement().tagName(); final String data = characterToken.getData(); if (characterToken.isCData()) node = new CDataNode(data); else if (tagName.equals("script") || tagName.equals("style")) node = new DataNode(data); else node = new TextNode(data); currentElement().appendChild(node); // doesn't use insertNode, because we don't foster these; and will always have a stack. }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.