XML文字节点是元素标签间未被子元素包裹的纯文本内容,nodeType为3;textContent递归提取所有文本并拼接,最常用;childNodes配合nodeType===3可精确筛选直接子级文字节点。

XML文字节点就是元素内部的纯文本内容
XML 中的 #text 节点(常称“文字节点”)指元素开始标签与结束标签之间、未被子元素包裹的原始字符串。它不是标签,不带属性,也不参与结构嵌套——只是字符数据本身。比如 里的 Alice 就是一个文字节点;而 中, 元素下其实没有直接的文字节点,只有子元素 。
用 textContent 获取元素全部文本内容(最常用)
textContent 是 DOM API 中最直接的方式,它递归提取目标元素及其所有后代中的所有文本节点内容,并拼接成一个字符串,自动忽略标签和空白换行(但保留元素内原有的空格和制表符)。
const nameEl = document.querySelector('name');
console.log(nameEl.textContent); // 输出 "Alice"
- 适用于绝大多数 HTML/XML 解析场景(如浏览器中解析 XML 文档或 XML 字符串)
- 会跳过注释节点和 CDATA 节点,只取文本节点
- 如果元素含多个子文本节点(比如中间有注释或换行),
textContent仍能合并返回完整文本 - 注意:在 XML 文档中若使用
DOMParser解析,该属性行为一致,但需确保文档加载完成后再访问
用 childNodes + nodeType === 3 精确筛选文字节点
当需要区分“直接子级文字节点”和其他类型节点(如元素、注释)时,childNodes 更底层可控。文字节点的 nodeType 值恒为 3,可据此过滤。
const nameEl = document.querySelector('name');
const textNodes = Array.from(nameEl.childNodes).filter(node => node.nodeType === 3);
const rawText = textNodes.map(n => n.nodeValue.trim()).join('');
console.log(rawText); // 输出 "Alice"
- 适合调试或处理混合内容(如
中只想取开头的Hello world!
Hello) -
nodeValue返回原始值(含前后空白),通常要配合trim() - 容易漏掉隐藏的空白文本节点:XML/HTML 换行缩进也会生成
#text节点,比如会产生三个子节点(换行、文本、换行)\n Alice\n
innerText 和 innerHTML 不适合 XML 文本提取
innerText 依赖渲染样式,只返回“用户可见”的文本,在 XML 文档(无 CSS 渲染)中行为不可靠,且在非浏览器环境(如 Node.js)根本不可用;innerHTML 返回的是序列化的 HTML 字符串,对 XML 元素会报错或返回空,因为它只认 HTML 上下文。
- 在 XML DOM 中调用
innerText可能返回空字符串或undefined -
innerHTML在 XML 文档上通常不可读(抛出DOMException或静默失败) - 不要试图用正则从 XML 字符串里“匹配文本”,会因嵌套、转义、CDATA 等崩溃










