android - Jsoup 输出的 HashMap

标签 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 存储所有 <a>标题 1 和标题 2 下的标签。而我想存储每个 <h3>标记为键和以下 <a>标签作为它的值(value)。

其次,我得到的存储输出包括像 <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);
    }

}

最佳答案

我不明白您所说的格式正确的输出是什么意思,但我认为至少我可以帮助您解决问题的第一部分。这就是如何使用 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 标签的原始顺序。

关于android - Jsoup 输出的 HashMap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34475058/

相关文章:

java - Jsoup 获取具有 CDATA 标签的 javascript 内容?

android - 带有按钮 onclick 位置的 ListView 在滚动时发生变化

javascript - 使用 get/post 的免费云数据存储?

java - Jsoup选择具有多个类的div

java - Hashmap 或 linkedhashmap 或其他任何一个对链接项进行排序哪个更好?

Java HashMap.put() 无法在 invokeLater createAndShowGui 方法内工作

java - 为什么 Jsoup 无法连接某些 URL?

android - 在 Android 中滑动时缩小的 Seekbar 按钮(使用自己的拇指 xml)

Android如何管理不同客户端的项目名称和 Logo 以及应用程序图标

java - R.java 丢失,导致此问题的其他可能错误是什么?