gpt4 book ai didi

java - JSoup 元素和 JSoup 节点之间的区别

转载 作者:搜寻专家 更新时间:2023-10-31 19:59:47 28 4
gpt4 key购买 nike

谁能解释一下 JSoup 中提供的 Element 对象和 Node 对象之间的区别?

在什么情况/条件下使用什么最好。

最佳答案

节点是 DOM 层次结构中任何类型对象的通用名称。

元素是一种特定类型的节点。

JSoup 类模型反射(reflect)了这一点:

因为 Element extends Node 任何你可以在 Node 上做的事情,你也可以在 Element 上做。但是 Element 提供了额外的行为,使其更易于使用,例如; Element 具有诸如 idclass 等属性,可以更轻松地在 HTML 文档中找到它们。

在大多数情况下,使用 Element(或 Document 的其他子类之一)将满足您的需求,并且更容易编写代码.我怀疑您可能需要回退到 Node 的唯一场景是 DOM 中是否存在 JSoup 未为其提供 Node 子类的特定节点类型.

下面的示例显示了使用 NodeElement 进行相同的 HTML 文档检查:

String html = "<html><head><title>This is the head</title></head><body><p>This is the body</p></body></html>";
Document doc = Jsoup.parse(html);

Node root = doc.root();

// some content assertions, using Node
assertThat(root.childNodes().size(), is(1));
assertThat(root.childNode(0).childNodes().size(), is(2));
assertThat(root.childNode(0).childNode(0), instanceOf(Element.class));
assertThat(((Element) root.childNode(0).childNode(0)).text(), is("This is the head"));
assertThat(root.childNode(0).childNode(1), instanceOf(Element.class));
assertThat(((Element) root.childNode(0).childNode(1)).text(), is("This is the body"));

// the same content assertions, using Element
Elements head = doc.getElementsByTag("head");
assertThat(head.size(), is(1));
assertThat(head.first().text(), is("This is the head"));
Elements body = doc.getElementsByTag("body");
assertThat(body.size(), is(1));
assertThat(body.first().text(), is("This is the body"));

YMMV 但我认为 Element 形式更易于使用并且更不容易出错。

关于java - JSoup 元素和 JSoup 节点之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47881838/

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