繁体   English   中英

Jsoup:检查元素是否在另一个元素之前(排序)?

[英]Jsoup: check if Element is before another (sorting)?

我需要解析 HTML 文本两次并收集不同的元素。 在我的第一次解析中,我用 eg 收集它们

    final Document doc = Jsoup.parse(htmlStr.getContent());
    ArrayList<Element> collectEls=new ArrayList<>();
    final Elements referenceElements = doc.select("[data-coll='first-pass']");
    // some more  logic...
    referenceElements.forEach(el -> collectEls.add(el));

在第二轮类似

    final Elements referenceElements = doc.select("[data-coll='second-pass']");
    // some more  logic...
    referenceElements.forEach(el -> collectEls.add(el));

我不能一次性收集它们。 该算法将非常复杂。 我需要根据 HTML 文本中的 position 对referenceElements进行排序,即类似于

referenceElements.sort((el1,el2) -> el1.compareTo(el2)); //would return true if el1 appears BEFORE el2

老实说,我不知道如何比较它们。 我只找到了before方法,但这是用于插入并且不执行任何类型的检查。 举例来说,我希望el1el2是不同的,即在意义上没有重叠,一个是另一个的孩子。

我这里没有可用的 Java 编译器,但我认为您可以使用以下信息开始弄清楚它:

  1. 解析之前,开启HTML节点的跟踪位置: setTrackPosition https://jsoup.org/apidocs/org/jsoup/parser/Parser.html#setTrackPosition(boolean)
  2. 使用 Element 的endSourceRange方法获取元素的结束标记 HTML 的位置,以便将其与其他元素的结束标记 position 进行比较。请参阅https://jsoup.org/apidocs/org/jsoup/nodes/Element。 html#endSourceRange()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM