XML DOM 节点信息一览表
—— 一张图记住每个节点能告诉你什么(2025 年最新最全)
| 节点类型(nodeType) | nodeName | nodeValue | textContent | 实际用途(一句话总结) |
|---|---|---|---|---|
| 1 ELEMENT_NODE | 标签名(大写) | null | 元素内全部文本(最常用!) | 取标签名、取文本、遍历子节点 |
| 2 ATTRIBUTE_NODE | 属性名 | 属性值 | 属性值 | 取属性值(推荐用 getAttribute) |
| 3 TEXT_NODE | “#text” | 文本内容 | 文本内容 | 取纯文本内容(实际用 textContent 更方便) |
| 4 CDATA_SECTION_NODE | “#cdata-section” | CDATA 内容 | CDATA 内容 | 保留原始 < > & 等特殊字符 |
| 7 PROCESSING_INSTRUCTION | target(如 xml) | 整个内容(version=”1.0″…) | 同 nodeValue | 读取 等处理指令 |
| 8 COMMENT_NODE | “#comment” | 注释文字 | 注释文字 | 取 |
| 9 DOCUMENT_NODE | “#document” | null | null | 整个文档的根,是所有节点的祖宗 |
| 10 DOCUMENT_TYPE_NODE | doctype 名称 | null | null | 取 中的名称 |
| 11 DOCUMENT_FRAGMENT_NODE | “#document-fragment” | null | null | 轻量级容器,常用于批量插入节点 |
实战速查:你想知道什么?直接看这里!
// 假设你现在手里有一个 node(任意节点)
console.log({
类型: node.nodeType, // 数字 1~12
类型名称: node.constructor.name, // 如 "Element"、"Text"、"Attr"
nodeName: node.nodeName, // 标签名或 #text
nodeValue: node.nodeValue, // 文本/属性值
textContent: node.textContent, // 最常用!元素内全部文字
标签名: node.tagName, // 只有元素有(大写)
属性值: node.getAttribute?.("id"), // 只有元素有
是否元素: node.nodeType === 1,
是否文本: node.nodeType === 3,
是否属性: node.nodeType === 2,
});
经典判断写法(99% 项目都在用)
// 1. 是不是元素节点(最常用判断)
if (node.nodeType === 1 || node instanceof Element) { ... }
// 2. 是不是纯文本节点(常用于过滤空白)
if (node.nodeType === 3 && node.nodeValue.trim() === "") { /* 空白文本 */ }
// 3. 安全取文本(推荐写法)
const text = node.textContent || node.nodeValue || "";
// 4. 安全取属性(推荐写法)
const id = node.getAttribute?.("id") || node.id || "";
终极记忆口诀(背会这 4 句就够了)
- 想取文本 → 直接
node.textContent(万能) - 想取属性 → 直接
node.getAttribute("name")(最快) - 想知道是什么节点 → 看
node.nodeType === 1(元素?) - 其他所有信息 →
node.nodeName+node.nodeValue
一张图记住所有信息来源(强烈建议保存)
任何节点
├── nodeType → 1=元素 3=文本 2=属性 8=注释 ...
├── nodeName → 标签名 / "#text" / "#comment"
├── nodeValue → 只有文本、属性、注释、CDATA 有值
├── textContent → 只有元素和文档片段有(最常用!)
└── tagName → 只有元素有(等价于 nodeName,但大写)
记住了上面这张表和 4 句口诀,
你就已经掌握了 XML DOM 中“如何快速知道一个节点到底长什么样”的全部核心技能!
需要我给你生成一个“节点信息可视化小工具”(输入任意节点立刻显示所有信息),随时说一声~