可以获取对单个文本节点的对象引用。我想也许你在看着Jsoup的TextNode对象。
Element的顶级文本是TextNode Object的一个实例。例如,“一些文本1”和“一些文本3”都是“< div class ='info'>”下的TextNode对象,并且“Line 1:”是“< strong>”下的TextNode Object。
Element对象有一个textNodes()方法,它可以用来保存这些TextNode对象。
检查下面的代码:
String html = "<html>" +
"<body>" +
"<div class="info">" +
"<strong>Line 1:</strong> some text 1<br>" +
"<b>some text 2</b><br>" +
"<strong>Line 3:</strong> some text 3<br>" +
"</div>" +
"</body>" +
"</html>";
Document document = JSoup.parse(html);
Element infoDiv = document.select("div.info").first();
List<TextNode> infoDivTextNodes = infoDiv.textNodes();
此代码找到的第一个< div>元素谁拥有与关键=“类”和值=“信息”的属性。然后直接在“< div class ='info'>”中获得对所有TextNode对象的引用。这份名单看起来像:
List<TextNode>[" some text 1", " some text 3"]
TextNode对象具有与之相关的,你可以利用一些甜蜜的数据和方法,并延伸Node给你更多的功能利用。
以下是使用class =“info”获取div内每个TextNode的对象引用的示例。
for(Iterator<Element> elementIt = document.select("div.info").iterator(); elementIt.hasNext();){
Element element = elementIt.next();
for (Iterator<TextNode> 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<Element> elementIt = document.body().getAllElements().iterator(); elementIt.hasNext();) {
Element element = elementIt.next();
//Maybe some magic for each element..
for (Iterator<TextNode> textIt = element.textNodes().iterator(); textIt.hasNext();) {
TextNode textNode = textIt.next();
//Lots of magic here for each textNode..
}
}
我改变了我的答案通过使用TagSoup XOM您的XPath来试试。 – laz 2012-08-06 01:07:43
感谢您的代码,我会给tagoup一个镜头。 Tagsoup比Jsoup更好吗? 我是相当新的解析,并在7年后再次开始在java中编码,所以认为我是一个新手:)。 我只是试图解析存储在我的机器上的一组html文件,以提取有用的数据并存储在数据库中。唯一的限制是我不想在html中进行js或image调用,因为这些链接不存在,并且可能会使进程变慢。 – 2012-08-06 10:32:39
我只是试着运行代码,输出是空的。当我打印textElements.size()时,它是0.任何想法? – 2012-08-06 11:00:23