可以獲取對單個文本節點的對象引用。我想也許你在看着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