You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用getElementsByTagName获取节点值时,如何避免尖括号导致文本捕获提前终止?

解决XML节点嵌套标签导致文本截断的问题

这个坑我之前踩过!你现在的问题是只提取了<ArticleTitle>节点下的第一个文本子节点,但里面的<i>是独立的元素节点,它的文本内容属于自己的子节点,所以直接取childNodes[0].nodeValue自然就只拿到了前面的部分。

两种可行的解决办法:

1. 用原生textContent属性(推荐)

现代浏览器都支持元素的textContent属性,它会自动收集当前元素及其所有子元素的文本内容,不需要手动遍历:

// 直接获取完整文本
const TheTitle = xmlDoc.getElementsByTagName("ArticleTitle")[i].textContent;

这样处理你的示例,就能得到完整的 "The Cat Sat on The Mat"。

2. 手动遍历所有子节点(兼容旧环境)

如果需要兼容一些非常老的浏览器,可以写一个辅助函数递归提取所有文本:

function extractFullText(element) {
  let fullText = '';
  // 遍历元素的所有子节点
  for (const node of element.childNodes) {
    // 文本节点直接追加内容
    if (node.nodeType === Node.TEXT_NODE) {
      fullText += node.nodeValue;
    } 
    // 元素节点递归提取子节点文本
    else if (node.nodeType === Node.ELEMENT_NODE) {
      fullText += extractFullText(node);
    }
  }
  return fullText;
}

// 使用方式
const titleElement = xmlDoc.getElementsByTagName("ArticleTitle")[i];
const TheTitle = extractFullText(titleElement);

为什么原来的代码会截断?

你的<ArticleTitle>节点的子节点结构其实是这样的:

  • 第1个节点:文本节点,内容为 "The Cat Sat on The "
  • 第2个节点:元素节点 <i>,它的子节点是文本节点 "Mat"

你只取了childNodes[0],自然就漏掉了后面元素节点里的文本内容啦。

内容的提问来源于stack exchange,提问作者haz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 06:02:43