Jsoup输出的Hashmap

时间:2015-12-26 20:41:13

标签: android hashmap jsoup

我有一个html文件,看起来像:

<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>

问题:Hashmap会在标题1和标题2下存储所有<a>标记。而我希望将每个<h3>标记存储为关键字,并将以下<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);
    }

}

1 个答案:

答案 0 :(得分: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标记,如果它直接位于a元素之前。其余的应该很容易理解。

请注意,我使用LinkedHashMap来处理h3标签的原始顺序。