JS怎么遍历XML节点 JavaScript XML DOM遍历方法

发布时间 - 2026-01-22 00:00:00    点击率:
JavaScript遍历XML节点需先用DOMParser解析字符串为Document对象,再通过children、getElementsByTagName或querySelectorAll等API安全访问元素节点,避开文本节点干扰,并可递归遍历全部元素。

JavaScript 中遍历 XML 节点主要依靠原生 XML DOM API,核心是把 XML 字符串解析为 Document 对象,再用类似 HTML DOM 的方式(如 childNodes

getElementsByTagNamequerySelector 等)访问和遍历节点。关键在于正确解析、识别节点类型、避开文本节点干扰。

解析 XML 字符串为 DOM 文档

浏览器中不能直接用 new DOMParser() 解析不规范的 XML(比如含 BOM、编码错误或自闭合标签写法不当),需确保字符串格式合法:

  • 使用 DOMParser 解析(现代浏览器支持):
    const parser = new DOMParser();
    const xmlDoc = parser.parseFromString(xmlStr, "application/xml");

    解析失败时,xmlDoc.querySelector("parsererror") 会存在,可据此判断是否出错。
  • IE8/9 需用 ActiveXObject("Microsoft.XMLDOM")(已过时,仅作兼容参考)。

区分节点类型,安全遍历 childNodes

childNodes 包含元素节点、文本节点(换行缩进)、注释节点等。直接遍历易报错或跳过目标节点:

  • 只处理元素节点(nodeType === 1):
    for (let node of parent.childNodes) {
    if (node.nodeType === 1) { /* 处理元素 */ }
    }
  • 更简洁:用 children(只返回元素子节点,忽略文本/注释):
    for (let elem of parent.children) { /* elem 是 Element 类型 */ }

按标签名或属性快速定位并遍历

比递归遍历更高效,适合有明确结构的 XML:

  • 获取所有同名元素:
    const items = xmlDoc.getElementsByTagName("item");
    Array.from(items).forEach(item => { /* 处理每个 item 元素 */ });
  • querySelectorAll 支持 CSS 选择器:
    const titles = xmlDoc.querySelectorAll("book title");
    titles.forEach(el => console.log(el.textContent));
  • 读取属性值:
    const id = item.getAttribute("id");
    // 或 el.attributes["id"]?.value

递归遍历全部元素节点(深度优先)

适合结构未知或需统一处理所有元素的场景:

  • 简单递归函数示例:
    function walkElements(node) {
    if (node.nodeType !== 1) return;
    console.log(node.tagName, node.textContent.trim());
    for (let child of node.children) {
    walkElements(child);
    }
    }
    walkElements(xmlDoc.documentElement);
  • 注意:避免对 textContent 直接全量取值——深层嵌套时可能包含大量空白或无关文本,建议用 node.innerText(部分浏览器支持)或针对性取子元素内容。


# css  # javascript  # java  # html  # js  # node  # 编码  # 浏览器  # app  # microsoft  # 递归函数 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  Laravel怎么实现模型属性的自动加密  如何破解联通资金短缺导致的基站建设难题?  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  如何在橙子建站中快速调整背景颜色?  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  高性能网站服务器配置指南:安全稳定与高效建站核心方案  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  如何在Windows服务器上快速搭建网站?  大连 网站制作,大连天途有线官网?  Laravel如何发送系统通知?(Notification渠道示例)  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  🚀拖拽式CMS建站能否实现高效与个性化并存?  如何在云服务器上快速搭建个人网站?  如何在建站主机中优化服务器配置?  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  长沙企业网站制作哪家好,长沙水业集团官方网站?  JavaScript如何操作视频_媒体API怎么控制播放  如何用美橙互联一键搭建多站合一网站?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  JavaScript常见的五种数组去重的方式  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  Python结构化数据采集_字段抽取解析【教程】  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  韩国服务器如何优化跨境访问实现高效连接?  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  佛山企业网站制作公司有哪些,沟通100网上服务官网?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  浅述节点的创建及常见功能的实现  Laravel如何创建自定义中间件?(Middleware代码示例)  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  jQuery 常见小例汇总  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  如何登录建站主机?访问步骤全解析  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  常州企业网站制作公司,全国继续教育网怎么登录?  中山网站制作网页,中山新生登记系统登记流程?  Laravel Docker环境搭建教程_Laravel Sail使用指南  JS中对数组元素进行增删改移的方法总结  Laravel怎么发送邮件_Laravel Mail类SMTP配置教程  怎么用AI帮你为初创公司进行市场定位分析?  如何在阿里云虚拟服务器快速搭建网站?  如何在万网自助建站中设置域名及备案?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  网易LOFTER官网链接 老福特网页版登录地址  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门