我有一个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.假设文件中有数百只动物。
答案 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个兄弟。
您可以使用elementSiblingIndex
和getElementsByIndexEquals
:
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();