[英]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
方法,但这是用于插入并且不执行任何类型的检查。 举例来说,我希望el1
和el2
是不同的,即在意义上没有重叠,一个是另一个的孩子。
我这里没有可用的 Java 编译器,但我认为您可以使用以下信息开始弄清楚它:
setTrackPosition
https://jsoup.org/apidocs/org/jsoup/parser/Parser.html#setTrackPosition(boolean)endSourceRange
方法获取元素的结束标记 HTML 的位置,以便将其与其他元素的结束标记 position 进行比较。请参阅https://jsoup.org/apidocs/org/jsoup/nodes/Element。 html#endSourceRange()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.