按照Jsoup中的内容选择标记,并在给定标记后获取第n个标记

时间:2016-08-02 14:26:55

标签: java html jsoup

我有一个HTML文档,我想从中获取数据。除了包含给定字符串的public async Task<Entity> GetEntityAsync() { _entity = await entityManager.GetEntityAsync(); return _entity } 标记中的第13个<td>标记外,数据标记没有唯一标识符。

因此,例如,文档中的第10个<td>标记包含单词“dog”(即<td>。此外,文档中没有其他<td>dog</td>标记包含相同的数据。) 。鉴于单词“dog”,我是否可以使用Jsoup方法在文档中的第23个<td>标记内提取内容,如果是,如何?

修改

<td>

在这样的文件中,只给出动物的名字,我希望能够从中提取第n个标签中的数字,让我们说4.所以给定“猫”我想找到32。鉴于“狗”,99。对于蛇13.假设文件中有数百只动物。

1 个答案:

答案 0 :(得分:1)

您可以使用structural pseudo selectors定位第n个元素。

doc.select("td:nth-child(23)");

由于您正在寻找带有Dog的行,您可以先选择该行。

Element dogRow = doc.select("tr:has(td:contains(dog))").first();

然后选择第23个孩子

String cellValue = dogRow.select("td:nth-child(23)").first().ownText();

或将它们组合

String cellValue = doc
    .select("tr:has(td:contains(dog)) > td:nth-child(23)")
    .first()
    .ownText();

修改

我重读了你的问题,好像你想要连续找到狗,然后找到第n个兄弟。

您可以使用elementSiblingIndexgetElementsByIndexEquals

    Element dogRow = doc.select("tr:has(td:contains(dog))").first();

    int dogCellIndex = dogRow
        .select("td:contains(dog)")
        .first()
        .elementSiblingIndex();

    int otherCellIndex = dogCellIndex + 10;

    String cellValue = dogRow
        .getElementsByIndexEquals(otherCellIndex)
        .text();