java jsoupxpath_java – 如何生成匹配Jsoup中特定元素的XPath查询?

_嗨,这是我的网页:

text div 1

text of first span

text of second span

text div 3

我正在使用jsoup来解析它,然后浏览页面内的所有元素并获取它们的路径:

Document doc = Jsoup.parse(new File("C:\\Users\\HC\\Desktop\\dataset\\index.html"), "UTF-8");

Elements elements = doc.body().select("*");

ArrayList all = new ArrayList();

for (Element element : elements) {

if (!element.ownText().isEmpty()) {

StringBuilder path = new StringBuilder(element.nodeName());

String value = element.ownText();

Elements p_el = element.parents();

for (Element el : p_el) {

path.insert(0, el.nodeName() + '/');

}

all.add(path + " = " + value + "\n");

System.out.println(path +" = "+ value);

}

}

return all;

我的代码给了我这个结果:

html/body/div = text div 1

html/body/div/span = text of first span

html/body/div/span = text of second span

html/body/div = text div 3

事实上我想得到这样的结果:

html/body/div[1] = text div 1

html/body/div[2]/span[1] = text of first span

html/body/div[2]/span[2] = text of second span

html/body/div[3] = text div 3

请任何人可以告诉我如何达到这个结果:).提前致谢.

解决方法:

正如这里提出的一个想法.

即使我非常确定有更好的解决方案来获取给定节点的xpath.例如,使用xslt,如answer中的“从XML节点java生成/获取xpath”.

这是基于您当前尝试的可能解决方案.

对于每个(父)元素,检查是否有多个具有此名称的元素.

伪代码:if(count(el.select(‘../’el.nodeName())> 1)

如果为true,则使用相同的名称计算previous-sibling ::并添加1.

count(el.select(‘preceding-sibling ::’el.nodeName())1

标签:java,dom,xpath,jsoup,html

来源: https://codeday.me/bug/20190623/1269683.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值