node是dom所有节点类型的总称,element是其子类型,专指html/xml标签元素;二者共享通用方法,但element额外提供标签专属功能,且getnodetype()返回1。

Node 是 DOM 中所有节点类型的总称,Element 是 Node 的子类型,专指 XML 或 HTML 中的标签元素(比如 <div>、<code><p></p>)。
Node 是 DOM 的基础抽象
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,等等。
立即学习“Java免费学习笔记(深入)”;
常见混淆点
很多人以为 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(" 这类字符串判断 —— 不可靠也不规范
Element 一定是 Node,但 Node 不一定是 Element。









