2015-12-26 75 views
1

我有一個HTML文件,該文件是這樣的:雖然我想每個<h3>標籤存儲爲鍵和HashMap的商店都標題1和標題2下的所有<a>標籤:Jsoup輸出的Hashmap

<html> 
<body> 
<h3>title 1</h3> 
<a>'a paragraph here'</a> 
<a>'a paragraph here'</a> 
<a>'a paragraph here'</a> 
<h3><b>title 2</b></h3> 
<a>'a paragraph here'</a> 
<a>'a paragraph here'</a> 
<a>'a paragraph here'</a> 
</body></html> 

問題跟着<a>標籤作爲它的價值。

其次,我得到的存儲輸出包括標籤,如<h3>,<b><br>。我在哪裏可以在此代碼中實現Html.frmHtml以獲得正確的格式化輸出。

public HashMap<String, List<String>> CreateMas() throws IOException{ 
// TODO Auto-generated method stub 
String name = "1.html"; 
InputStream is = getAssets().open(name); 
Document doc = Jsoup.parse(is, "UTF-8", "http"); 
HashMap<String, List<String>> mas = new HashMap<String, List<String>>(); 

for(Element element : doc.select("h3")) 
{ 
    String main = element.toString(); 
     \\Toast.makeText(getApplicationContext(), main, Toast.LENGTH_LONG).show(); 
    for(Element elemen : doc.select("a")) 
    { List<String> subm = new ArrayList<String>();   
     String sub = elemen.toString(); 
     subm.add(sub); 
     mas.put(main,subm); 
    } 

} 
+0

你是什麼意思適當的格式化輸出?那麼'Html.frmHtml'在這種情況下做了什麼?請明確闡述你期望的結果。 – luksch

回答

1

我不明白你的意思是適當的格式化輸出,但我認爲至少我可以幫助你解決問題的第一部分。這是如何建立與H3標籤文本作爲鍵和下一個標籤的地圖列表中的值:

String html = "" 
    +"<html>" 
    +"<body>" 
    +"<h3>title 1</h3>" 
    +"<a>'a paragraph 1 here'</a>" 
    +"<a>'a paragraph 2 here'</a>" 
    +"<a>'a paragraph 3 here'</a>" 
    +"<h3><b>title 2</b></h3>" 
    +"<a>'a paragraph 4 here'</a>" 
    +"<a>'a paragraph 5 here'</a>" 
    +"<a>'a paragraph 6 here'</a>" 
    +"</body></html>"; 
Document doc = Jsoup.parse(html); 

Elements as = doc.select("a"); 
String currentTitle = null; 
Map<String,List<String>> mas = new LinkedHashMap<>(); 
for (Element a : as){ 
    if ("h3".equals(a.previousElementSibling().tagName())){ 
     currentTitle = a.previousElementSibling().text(); 
     mas.put(currentTitle, new ArrayList<String>()); 
    } 
    mas.get(currentTitle).add(a.text()); 
} 

System.out.println(""+mas); 

上述程序使用previousElementSibling()方法來識別H3標籤,如果它是直接在之前一個元素。其餘的應該很容易理解。

請注意,我使用LinkedHashMap爲了h3標記的原始順序。

+0

@luksch感謝您爲我的一天做出的回覆。 – Haider