java
  • jsoup
  • 2013-07-30 54 views 1 likes 
    1

    我有一個HTML文件,其中有一部分是這樣的:如何在JSoup中獲得相關的類和值?

    <a name="user_createtime"></a> 
    <p class="column"> 
    <span class="coltitle">CreateTime</span>&nbsp;&nbsp;<span class="titleDesc"><span class='defPopupLink' onClick='popupDefinition(event, "datetime")'>datetime</span></span>&nbsp;&nbsp;&nbsp;&nbsp;<span class = "spaceandsize">(non-null)<sup><span class='glossaryLink' onclick="popupDefinition(event, '<b>non-null</b><br>The column cannot contain null values.')">?</span></sup></span> 
    <br> 
    <span class="desc">Timestamp when the object was created</span> 
    
    <a name="user_createuser"></a> 
    <p class="column"> 
    <span class="coltitle">CreateUser</span>&nbsp;&nbsp;<span class="titleDesc">foreign key to <A HREF="User.html" TARGET="tableFrame">User</A></span>&nbsp;&nbsp;&nbsp;&nbsp; 
    <span class = "spaceandsize">(database column: CreateUserID)</span> 
    <br> 
    <span class="desc">User who created the object</span> 
    

    有很多這樣的Coltitle。 titleDesc和desc類。

    現在,如果我得到一個輸入字符串,如「CreateTime」,我想輸出是:

    CreateTime, datetime, Timestamp when the object was created 
    

    ,如果我得到一個輸入字符串「CREATEUSER」,我想輸出是:

    CreateUser, foreign key to User, User who created the object 
    

    我使用Jsoup對於這一點,而這到目前爲止,我已經得到了:

    Elements colElements = Jsoup.parse(html).getElementsByClass("coltitle").select("*"); 
    
    
    System.out.println("your Col:"); 
    for (Element element : colElements) 
    { 
        if(element.ownText().equalsIgnoreCase("CreateTime")) 
         System.out.println(element.text()); 
    } 
    

    剛剛打印選擇coltitl即我如何解析相關類並獲得它們的值?或者,他們甚至沒有關係,我是否正在走上錯誤的道路? 有人可以幫我得到我想要的輸出嗎?

    回答

    1

    你只選擇<span>標籤都有效,因此,只打印他們重視他們所持有。

    您可以使用siblingElements()-方法來獲取您首先選擇的元素的同胞。

    你的HTML似乎並沒有被正確格式化,但下面應該工作

    System.out.println("your Col:"); 
    for (Element element : colElements) { 
        if (element.ownText().equalsIgnoreCase("CreateTime")) { 
         System.out.print(element.text()); 
         for (Element sibling : element.siblingElements()) { 
          System.out.print(", " + sibling.text()); 
         } 
        } 
        if (element.ownText().equalsIgnoreCase("CreateUser")) { 
         System.out.print("\n"+element.text()); 
         for (Element sibling : element.siblingElements()) { 
          System.out.print(", " + sibling.text()); 
         } 
        } 
    } 
    

    這將選擇類「colTitle」的元素。 if-case將檢查它是否是其中之一,然後打印出元素文本。然後它會轉移到它的兄弟姐妹,並打印出他們的文本。

    +0

    哇。奇蹟般有效。這是因爲像你這樣的人,stackoverflow _什麼是IS_。祝你有美好的一天! :-) – VictorCreator

    +0

    謝謝!人們總是可以盡力爲自己做出貢獻! ;) –

    0

    根據api文檔,您可以調用colElements上的children()。

    http://jsoup.org/apidocs/org/jsoup/nodes/Element.html#children()

    +0

    他選擇的元素沒有任何子元素,但是是兄弟節點。 –

    +0

    感謝您的及時回覆。但你是否說** titleDesc **和** desc **類是** Coltitle **的子類? – VictorCreator

    +0

    @Zyril:可能,你說得對,當我做「colElements.childrenNodeSize」時,我只會得到1: - | 關於如何選擇相關兄弟節點的任何建議? – VictorCreator

    相關問題