簡體   English   中英

如何在給定的選擇范圍內使用Jsoup解析元素?

[英]How to parse elements with Jsoup in given select range?

嗨,我正在嘗試使用Jsoup解析整堆html,但是無法達到預期的目標。 我是從生成的javadoc解析它的,因為它缺少id或其他有用的元素來進行解析。 另外一個問題是我必須解析同一文檔中的相同標簽,因此我不能嚴格定義選擇。 我設法做到了,但是方法名稱仍然有問題,這在DOM的另一個同級中。 這是我的html和所需的解析結果: http : //img62.imageshack.us/img62/9870/08bz.png

我必須以某種方式“綁定”“ pre”和“ ol”標簽(解析所需的html范圍)。 請幫我。

嘗試通過以下方式進行操作: Elements methodName = doc.select("pre:contains(public), dl > dd > ol"); 但這給我返回了太多的方法名稱。

如果我正確理解,則只需要public void method_name()和解釋該方法作用的列表項,而沒有任何其他html標記。

Elements methodName = doc.select("pre:contains(public), dl > dd > ol > li");

這將總共選擇4個元素-方法名稱和三個列表項,但是它們周圍仍將帶有html標簽,例如<pre><li> 在每個Element上調用text()方法以刪除這些標簽:

for (Element e : methodName) {  
    System.out.println(e.text());
}

哪個輸出:

11-08 10:47:19.468: I/System.out(816): public void test()
11-08 10:47:19.468: I/System.out(816): Navigates to app
11-08 10:47:19.468: I/System.out(816): opens main panel
11-08 10:47:19.478: I/System.out(816): starts it

由於缺少任何id屬性,我認為無法通過一個select語句僅選擇相關標簽。 因此,相反,您可以遍歷您選擇的Elements並檢查<pre>標記后是否帶有<li>標記(假設您使用的是我在第一個答案中使用的同一doc.select()語句)。

例:

Elements methodName = doc.select("pre:contains(public), dl > dd > ol > li");

for (int i = 0; i < methodName.size(); i++) {
    if (methodName.get(i).tagName().equals("pre")) {        // if the <pre> tag
        if (methodName.get(i + 1).tagName().equals("li")) { // is followed by a <li> tag
            System.out.println(methodName.get(i).text());   // print it
        }
    } else System.out.println(methodName.get(i).text());    // else it is a <li> tag so print it
}  

這將提供與我的第一個示例相同的輸出,即使還有兩個其他<pre>標記的methodNames之后沒有<ol>列表(如您在評論中所提到的)。

注意:根據文檔的格式設置,您可能必須注意IndexOutOfBoundsException (當我稱i + 1 ),但是您可以為此添加另一個檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM