可以获取对单个文本节点的对象引用。我想也许你在看着Jsoup的TextNode对象。
Element的顶级文本是TextNode Object的一个实例。例如,“一些文本1”和“一些文本3”都是“< div class ='info'>”下的TextNode对象,并且“Line 1:”是“< strong>”下的TextNode Object。
Element对象有一个textNodes()方法,它可以用来保存这些TextNode对象。
检查下面的代码:
String html = "" +
"
" +"
"Line 1: some text 1
" +
"some text 2
" +
"Line 3: some text 3
" +
"
"" +
"";
Document document = JSoup.parse(html);
Element infoDiv = document.select("div.info").first();
List infoDivTextNodes = infoDiv.textNodes();
此代码找到的第一个< div>元素谁拥有与关键=“类”和值=“信息”的属性。然后直接在“< div class ='info'>”中获得对所有TextNode对象的引用。这份名单看起来像:
List[" some text 1", " some text 3"]
TextNode对象具有与之相关的,你可以利用一些甜蜜的数据和方法,并延伸Node给你更多的功能利用。
以下是使用class =“info”获取div内每个TextNode的对象引用的示例。
for(Iterator elementIt = document.select("div.info").iterator(); elementIt.hasNext();){
Element element = elementIt.next();
for (Iterator textIt = element.textNodes().iterator(); textIt.hasNext();) {
TextNode textNode = textIt.next();
//Do your magic with textNode now.
//You can even reference it's parent via the inherited Node Object's
//method .parent();
}
}
使用这种嵌套迭代器技术,您可以访问对象的所有文本节点,并与一些聪明的逻辑,你可以只是做Jsoup的结构中任何你想要的。
我已经实现了我以前创建的拼写检查方法的逻辑,它对大量元素,可能是很多列表或其他东西的非常大的html文档确实有一些性能点击。但是如果你的文件长度合理,你应该获得足够的性能。
以下是获取文档的每个TextNode的对象引用的示例。
Document document = Jsoup.parse(html);
for (Iterator elementIt = document.body().getAllElements().iterator(); elementIt.hasNext();) {
Element element = elementIt.next();
//Maybe some magic for each element..
for (Iterator textIt = element.textNodes().iterator(); textIt.hasNext();) {
TextNode textNode = textIt.next();
//Lots of magic here for each textNode..
}
}