gpt4 book ai didi

java - 如何将评论节点与 Jsoup 选择器 api 匹配?

转载 作者:太空宇宙 更新时间:2023-11-03 23:12:14 24 4
gpt4 key购买 nike

这是一个小的 HTML 代码:

<ol class="annotations">
<!-- START ANNOTATIONS -->
<li class="annotation">
Foo
</li>
<li class="annotation">
Bar
</li>
...
<!-- END ANNOTATIONS -->
</ol>

<ol class="annotations">
<li class="annotation">
Baz
</li>
...
</ol>

我只想匹配第一个 ol 节点。这是我所做的:

Document d = Jsoup.parse(...);
Elements findings = d.select("ol.annotations");

if ((findings.size() != 0) && //
(findings.first().html().startsWith("<!-- START ANNOTATIONS -->"))) {
// Found !
} else {
// Not found !
}

如何使用单个 CSS 查询实现这一点?

Jsoup 1.8.2

最佳答案

How can I achieve that using a single CSS query?

你不能,因为没有 CSS selectors用于评论节点。

您目前的操作方式存在一些问题:

  1. 您的 HTML 包含带有 annotations 类的 ol 元素,但您的代码使用的是 ol.notes 选择器。

  2. (这可能是也可能不是问题,在快速测试中它看起来像 [对于我的测试,在我的文档上] JSoup 修剪字符串。它可能不应该是,但是......)第一个匹配项,您正在调用 html(),然后使用 startsWith — 但 HTML 可能以一些您不允许的空格开头。

除了正确的选择器,我可能会专门寻找评论节点:

Element firstMatch = findings().first();
Node firstChild = firstMatch == null || firstMatch.childNodes().size() == 0 ? null : firstMatch.childNodes().first();
if (firstChild != null && firstChild instanceof Comment && ((Comment)firstChild).getData().indexOf("START ANNOTATIONS") != -1) {
// Yes, it's there
}

这只是一种拼凑,但您明白了。特别是第二行比我想要的要尴尬一些,我非常惊讶地看到 JSoup 的 Node没有 firstChild 访问器。它是 DOM API 的一个相当基本的部分,并且使该行比它需要的更笨拙。

关于java - 如何将评论节点与 Jsoup 选择器 api 匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32154114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com