java - 用jsoup解析表数据

标签 java android html-parsing jsoup string-parsing

我正在使用 jsoup在我的 android 应用程序中解析我的 html 代码,但现在我需要解析表数据,但我无法让它工作。我尝试了很多方法但没有成功,所以如果有人有经验,我想在这里试试运气。

这是我的 html 的一部分:

<div id="editacia_jedla">
    <h2>My header</h2>
    <h3>My sub header</h3>

    <table border="0" class="jedalny_listok_tabulka" cellpadding="2" cellspacing="1">
    <tr>
        <td width="100" class="menu_nazov neparna" align="left">Food Menu 1</td>
        <td class="jedlo neparna" align="left">vegetable and beef
        <div class="jedlo_box_alergeny">Allergens: <a href="#" class="alergen_1">1</a>, <a href="#" class="alergen_3">3</a></div>
        </td>
    </tr>
    <tr>
        <td width="100" class="menu_nazov parna" align="left">Food Menu 2</td>
        <td class="jedlo parna" align="left">Potato salad and pork
        <div class="jedlo_box_alergeny">Allergens: <a href="#" class="alergen_6">6</a></div>
        </td>
    </tr>
    </table>  
    etc
</div>

我的java/android代码:

try {
            String tableHtmlCode="";
            Document fullHtmlDocument = Jsoup.connect(urlOfFoodDay).get();
            Element elm1 = fullHtmlDocument.select("#editacia_jedla").first();
            for( Element element : elm1.children() )
            {
                tableHtmlCode+=element.getElementsByIndexEquals(2); //this set table content because 0=h2, 1=h3
            }
            Document parsedTableDocument = Jsoup.parse(tableHtmlCode);
            //Element th = parsedTableDocument.select("td[class=jedlo neparna]").first();  THIS IS BAD
            String foodContent="";
            String foodAllergens="";
        }

所以现在我想提取文本 vegetable and beef 并将其保存到 div 类 jedlo_box_alergeny 中的字符串 foodContent 和 numbera 1、3(一起)保存到字符串 foodAllergens。有人可以帮忙吗?我将非常感谢任何想法

最佳答案

迭代文档的父标签 jedalny_listok_tabulka 并循环 td 标签。

td 标签是包含过敏值的 href 标签的父标签。因此,您将遍历标签 a 元素以获取您的数字,例如:

Elements myElements = doc.getElementsByClass("jedalny_listok_tabulka")
                .first().getElementsByTag("td");
        for (Element element : myElements) {
            if (element.className().contains("jedlo")) {
                String foodContent = element.ownText();
                String foodAllergen = "";

                for (Element href : element.getElementsByTag("a")) {
                    foodAllergen += " " + href.text();
                }

                System.out.println(foodContent + " : " + foodAllergen);
            }
        }

输出:

vegetable and beef :  1 3
Potato salad and pork :  6

关于java - 用jsoup解析表数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21578301/

相关文章:

go - 如何解析网页跨度中的值?

python - 为什么 urllib 不适用于本地网站?

java - javax 的 NotNull 在 Java 8 中被移除了吗?

java - 我们是否需要显式关闭在方法参数中作为匿名类传递的 Streams 或 Reader?

java - 访问 google 任务 api 时出现 403 禁止错误

android - 将对谷歌云端点的访问限制为 Android 应用程序

android - Android Bitmap.getPixels()从BufferedImage.getRGB()返回不同的数据

java - 如何以不同颜色打印异常

java - DateFormatter 将字符串解析为日期给出了错误的格式

java - 在雅虎财经上使用 JSoup 提取表数据