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

JavaScript for循环内拼接XML字符串未达预期问题求助

问题分析

你的代码存在3个核心错误,导致最终输出和预期不符:

  • 循环逻辑错误:你在for循环内部每次迭代都重新声明并赋值xmltext变量,每一轮循环都会把上一轮拼接好的内容完全覆盖,循环结束后xmltext只会保留最后一条数据(Jerry)对应的节点内容,Tom对应的片段会直接丢失。
  • 标签大小写不匹配:XML语法对标签大小写敏感,你代码中写的是小写的<age>标签,和你预期输出里大写开头的<Age>标签不一致。
  • 缩进格式不符:你当前用制表符\t作为子节点缩进,预期输出使用2个空格作为缩进。

额外注意:标准合法的XML文件必须有且仅有一个根节点,你预期输出的内容是多个平级的<Placemark>节点,直接生成文件会是不符合规范的XML,建议在外层包裹对应的根节点,如果是后续要把这段片段嵌入其他XML文件可以忽略这个要求。

修正后的代码
const data = [{"name": "Tom", age: "20"}, {"name": "Jerry", age: "20"}]
// 循环外初始化xmltext,这里先写入XML声明和根节点开头,不需要可以删除
let xmltext = '<?xml version="1.0" encoding="UTF-8"?>\n<PlacemarkList>\n';

for (let i = 0; i < data.length; i++) {
   // 用+=累加拼接内容,不要重新赋值变量;调整缩进为2空格,修改age标签为大写Age
   xmltext += '  <Placemark>\n' + 
        '    <name>' + data[i].name + '</name>\n' +
        '    <Age>' + data[i].age + '</Age>\n' +
        '  </Placemark>\n';
}
// 补全根节点闭合标签,不需要根节点可以删除
xmltext += '</PlacemarkList>';

const filename = "file.xml";
const bb = new Blob([xmltext], {type: 'text/xml'});
const downloadLink = document.getElementById('download');
downloadLink.setAttribute('href', window.URL.createObjectURL(bb));
downloadLink.setAttribute('download', filename);

如果你不需要根节点,只需要把代码里根节点相关的行删除,把xmltext初始化为空字符串即可,最终就会输出你预期的两个平级Placemark节点内容。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:01:03