[英]Parsing nested HTML unordered lists with Jsoup
我正在解析帶有嵌套無序列表的HTML文件,這是一個示例:
<ul>
<li class="category_x">xyz abc
<ul>
<li>foo 123 bar</li>
<li>456 bar foo</li>
</ul>
</li>
<li class="category_x">aaa bbb ccc
<ul>
<li>xxx yyy zzz</li>
<li>123 abc 456</li>
</ul>
</li>
</ul>
我對關系li > ul > li
(將其視為Element
類型的Jsoup對象: grandParentNode
> parentNode
> eNode
) grandParentNode.text()
,但是使用方法grandParentNode.text()
我也得到了整個嵌套<ul>
的文本<ul>
列表(包含eNode.text()
)。
// getting the triplets
Elements triplets = doc.select("li > ul > li");
// print the triplet
for (Element eNode : triplets)
{
Element parentNode = eNode.parent();
Element grandParentNode = parentNode.parent();
System.out.println("Current node: " + eNode.text());
System.out.println("Grand parent: " + grandParentNode.text());
}
輸出為:
Current node: foo 123 bar
Grand parent: xyz abc foo 123 bar 456 bar foo
Current node: 456 bar foo
Grand parent: xyz abc foo 123 bar 456 bar foo
Current node: xxx yyy zzz
Grand parent: aaa bbb ccc xxx yyy zzz 123 abc 456
Current node: 123 abc 456
Grand parent: aaa bbb ccc xxx yyy zzz 123 abc 456
我希望它是:
Current node: foo 123 bar
Grand parent: xyz abc
Current node: 456 bar foo
Grand parent: xyz abc
Current node: xxx yyy zzz
Grand parent: aaa bbb ccc
Current node: 123 abc 456
Grand parent: aaa bbb ccc
看一下Jsoup文檔,看來我需要修改HTML才能使這些字符串包含在諸如value=""
屬性之類的東西中,但是我無法修改HTML ...最重要的是,所有這些<li class="category_x">
在每個節點上重復使用相同的值,而不是樹的“ li
葉子”,因此它們在過濾數據方面並沒有真正的幫助。
我已經嘗試過諸如doc.select("li:lt(1) > ul > li");
但它不起作用,問題在於HTML的結構以及我如何使用Jsoup的Element
類中的方法text()
。 問題是我不知道如何避免text()
。
任何想法?
謝謝
使用ownText()
方法僅選擇元素直接擁有的文本,而忽略任何子元素的文本。
因此更改此行:
System.out.println("Grand parent: " + grandParentNode.text());
至
System.out.println("Grand parent: " + grandParentNode.ownText());
現在,輸出將顯示:
Current node: foo 123 bar
Grand parent: xyz abc
Current node: 456 bar foo
Grand parent: xyz abc
Current node: xxx yyy zzz
Grand parent: aaa bbb ccc
Current node: 123 abc 456
Grand parent: aaa bbb ccc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.