有人可以解释一下JSoup中提供的Element
对象和Node
对象之间的区别吗?
哪种情况/情况最适合使用。
答案 0 :(得分:5)
节点是DOM层次结构中任何类型对象的通用名称。
元素是一种特定类型的节点。
JSoup类模型反映了这一点:
由于Element extends Node
Node
可以对Element
执行任何操作,因此您也可以执行Element
。但Element
提供了额外的行为,使其更易于使用,例如; id
具有class
和Element
等属性,可以更轻松地在HTML文档中找到它们。
在大多数情况下,使用Document
(或Node
的其他子类之一)将满足您的需求,并且更容易进行编码。我怀疑你可能需要回退到Node
的唯一情况是,如果DOM中没有提供Node
的子类的特定节点类型。
以下是使用Element
和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"));
显示相同HTML文档检查的示例:
Element
YMMV,但我认为exits: {
success: {
description: 'Returns ok response from api/responses/ok.js',
responseType: 'ok'
}
}, ...
表单更易于使用,而且更不容易出错。