XML文字节点是元素标签间未被子元素包裹的纯文本内容,nodeType为3;textContent递归提取所有文本并拼接,最常用;childNodes配合nodeType===3可精确筛选直接子级文字节点。
XML 中的 #text 节点(常称“文字节点”)指元素开始标签与结束标签之间、未被子元素包裹的原始字符串。它不是标签,不带属性,也不参与结构嵌套——只是字符数据本身。比如 里的 Alice 就是一个文字节点;而 中, 元素下其实没有直接的文字节点,只有子元素 。
textContent 获取元素全部文本内容(最常用)textContent 是 DOM API 中最直接的方式,它递归提取目标元素及其所有后代中的所有文本节点内容,并拼接成一个字符串,自动忽略标签和空白换行(但保留元素内原有的空格和制表符)。
const nameEl = document.querySelector('name');
console.log(nameEl.textContent); // 输出 "Alice"
textContent 仍能合并返回完整文本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()
#text 节点,比如 \n Alice\n 会产生三个子节点(换行、文本、换行)innerText 和 innerHTML 不适合 XML 文本提取innerText 依赖渲染样式,只返回“用户可见”的文本,在 XML 文档(无 CSS 渲染)中行为不可靠,且在非浏览器环境(如 Node.js)根本不可用;innerHTML 返回的是序列化的 HTML 字符串,对 XML 元素会报错或返回空,因为它只认 HTML 上下文。

innerText 可能返回空字符串或 undefined
innerHTML 在 XML 文档上通常不可读(抛出 DOMException 或静默失败)