Node是DOM所有节点类型的总称,Element是其子类型,专指HTML/XML标签元素;二者共享通用方法,但Element额外提供标签专属功能,且getNodeType()返回1。

Node 是 DOM 中所有节点类型的总称,Element 是 Node 的子类型,专指 XML 或 HTML 中的标签元素(比如 DOM 把整个文档看作一棵节点树,每个组成部分都继承自 注意: 立即学习“Java免费学习笔记(深入)”; 很多人以为 不过更推荐用 区分一个节点是不是元素,可以这样判断: Element 一定是 Node,但 Node 不一定是 Element。)。
Node 是 DOM 的基础抽象
Node 接口。它包括:元素(Element)、属性(Attr)、文本(Text)、注释(Comment)、文档(Document)、文档片段(DocumentFragment)等。所有这些类型共享一些通用方法和属性,比如:
getParentNode()、getChildNodes()、getNodeType()
getNodeName() 和 getNodeValue()(具体含义依节点类型而异)appendChild()、removeChild() 等操作树结构的方法Element 代表具体的标签节点
Element 继承自 Node,所以它具备所有 Node 的能力,但额外提供了面向“标签”的专属功能:
getTagName()(返回标签名,如 "DIV")getAttribute(String name)、setAttribute(String name, String value)
getElementsByTagName(String tag)、getElementsByClassName(String className)
hasAttribute(String name)、removeAttribute(String name)
Element 节点的 getNodeType() 返回常量 Node.ELEMENT_NODE(值为 1),而文本节点是 Node.TEXT_NODE(值为 3),注释节点是 8,等等。常见混淆点
getElementsByTagName() 返回的是 Element 对象,其实它返回的是 NodeList,其中每个项是 Node 类型 —— 但运行时实际是 Element 实例。所以你可以安全地向下转型:Node node = nodeList.item(0);
if (node instanceof Element) {
Element elem = (Element) node;
String id = elem.getAttribute("id");
}
getElementsByTagName() 直接获取 Element 列表(Java 9+ 支持泛型 NodeList,但老版本仍需转型);另外,像 getTextContent() 这类方法定义在 Node 上,所以 Element 也能调用,但它会递归拼接所有子孙文本节点的内容。简单判断技巧
getNodeType() == Node.ELEMENT_NODE
node instanceof Element
getNodeName().startsWith(" 这类字符串判断 —— 不可靠也不规范










