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

时间:2017-12-19 07:22:08

标签: java jsoup

有人可以解释一下JSoup中提供的Element对象和Node对象之间的区别吗?

哪种情况/情况最适合使用。

1 个答案:

答案 0 :(得分:5)

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

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

JSoup类模型反映了这一点:

由于Element extends Node Node可以对Element执行任何操作,因此您也可以执行Element。但Element提供了额外的行为,使其更易于使用,例如; id具有classElement等属性,可以更轻松地在HTML文档中找到它们。

在大多数情况下,使用Document(或Node的其他子类之一)将满足您的需求,并且更容易进行编码。我怀疑你可能需要回退到Node的唯一情况是,如果DOM中没有提供Node的子类的特定节点类型。

以下是使用ElementString 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")); 显示相同HTML文档检查的示例:

Element

YMMV,但我认为exits: { success: { description: 'Returns ok response from api/responses/ok.js', responseType: 'ok' } }, ... 表单更易于使用,而且更不容易出错。