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

JavaScript解析XML:如何分组遍历多个points标签下的point坐标

问题说明

需要实现按points父标签分组遍历输出下属坐标:第一次循环输出第一个points下所有point的坐标值,第二次循环输出第二个points下的坐标,以此类推。
直接通过标签名选择所有point时可以正常拿到全部坐标值,但尝试按父标签分组遍历时控制台无输出,先后试过.eq()、:nth-child选择器都没有解决问题。

参考XML结构
<object>
       <coordinate>pixel</coordinate>
       <type>rectangle</type>
       <description>None</description>
       <possibleresult>
           <name>Intersection</name>
       </possibleresult>
       <points>
           <point>684.999939,182.999985</point>
           <point>682.568420,217.040604</point>
           <point>612.568420,212.040604</point>
       </points>
   </object>
原有代码问题
  • 原生DOM的getElementsByTagName方法不支持CSS风格的后代选择器语法,xml.getElementsByTagName("points point")本身无法匹配到任何元素,这是控制台无输出的核心原因
  • 原有逻辑没有做两层遍历:先遍历所有points父节点,再遍历单个父节点下的point子节点,直接跨层级选取所有point自然无法实现按父标签分组输出的需求
可运行修复代码
fetch("file.xml")
.then(response => response.text())
.then(data => {
  const parser = new DOMParser();
  const xml = parser.parseFromString(data, "application/xml");
  
  // 第一步:拿到所有points父标签集合
  const pointsGroups = xml.getElementsByTagName("points");
  // 外层循环:逐个遍历每个points父标签
  for (let i = 0; i < pointsGroups.length; i++) {
    console.log(`第${i+1}个points标签下的坐标:`);
    const currentPointsNode = pointsGroups[i];
    // 第二步:拿到当前points标签下的所有point子标签
    const pointNodes = currentPointsNode.getElementsByTagName("point");
    // 内层循环:遍历当前父标签下的所有point坐标
    for (let j = 0; j < pointNodes.length; j++) {
      const coordinate = pointNodes[j].textContent.trim();
      console.log(coordinate);
    }
  }
})
.catch(console.error);

如果要使用jQuery选择器实现,需要先把解析后的XML对象传入jQuery包装器再做层级选择,不能直接在全局上下文查找,否则会匹配失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:18:35