childTag"匹配,但 "parentTag childTag"没有给出任何内容-6ren"> childTag"匹配,但 "parentTag childTag"没有给出任何内容-编辑:似乎是 1.8.3 中的一个错误,它在 1.11.2 中按预期工作。 我正在尝试使用 Java 中的 jsoup 1.8.3 解析 html 文档。我不明白某些选择器的行为(它们应该类似于 jQ-6ren">
gpt4 book ai didi

java - Jsoup: "parentTag > childTag"匹配,但 "parentTag childTag"没有给出任何内容

转载 作者:行者123 更新时间:2023-12-01 05:16:59 24 4
gpt4 key购买 nike

编辑:似乎是 1.8.3 中的一个错误,它在 1.11.2 中按预期工作。

我正在尝试使用 Java 中的 jsoup 1.8.3 解析 html 文档。我不明白某些选择器的行为(它们应该类似于 jQuery 选择器)。

考虑以下最小示例(它应该从 StackOverflow 问题中选择代码片段):

package edu.example;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class App {
public static void main(String[] args) throws Exception {
Document doc = Jsoup.connect("http://stackoverflow.com/questions/48407833").get();
Element question = doc.select("div#question div.post-text").first();
Elements allChildren = question.children();
Elements codeSnippets = allChildren.select("pre > code");
System.out.println("code snippets start-----");
System.out.println(codeSnippets);
System.out.println("/code snippets end -----");
}
}

我不明白的是:如果我将 pre > code 替换为 pre code,则所选元素的列表为空。为什么会出现这种情况?

如果我理解此页面:https://jsoup.org/cookbook/extracting-data/selector-syntax正确的话,那么

  • ancestor后代选择带有标签descendant的所有元素,这些元素源自带有标签ancestor的元素
  • parent > child 选择带有标签 child 的所有元素,这些元素直接源自带有标签 parent 的元素

父子关系是祖先-后代关系的特例(祖先-后代关系是父子关系的传递闭包)。第一个选择器怎么可能不严格匹配比第二个选择器更多的标签?

以下是相关 HTML 的摘录,如果您单击“查看页面源代码”,您将看到该内容:

<div class="question" data-questionid="48407833"  id="question">
...
<div class="post-text" itemprop="text">
...
<pre><code>package edu.example;
...

PS:如果您想快速构建一个小项目并尝试一下,这里有一个最小的 Maven pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>edu.example</groupId>
<artifactId>jsoupselectorquestion</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>jsoupselectorquestion</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.8.3</version>
</dependency>
</dependencies>
</project>

最佳答案

原因是 1.8 中的一个错误。使用更实际的版本,例如改为 1.11.2。

关于java - Jsoup: "parentTag > childTag"匹配,但 "parentTag childTag"没有给出任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48407833/

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