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

如何使用xml-writer在已有XML标签内添加多个子标签?

解决xml-writer添加子标签跑到父标签外的问题

问题出在xml-writer的自动闭合逻辑和标签上下文管理上,调整标签的开闭时机就能解决:

核心原因

你最初的createEmptyXML函数里,<Hello>标签因为没有子元素,被xml-writer自动处理成了自闭合标签<Hello .../>。第一次添加子标签时,writer会临时把它改成开放标签<Hello ...>来容纳子元素,但如果没手动控制父标签的闭合时机,后续操作会让writer误以为父标签已经闭合,导致新的子标签跑到外部。

修正方案

  1. 保持父标签开放:创建<Hello>后不要让它自动闭合,去掉隐含的自闭合逻辑。
  2. 批量添加子标签:所有子标签都添加完成后,再手动闭合父标签。
  3. 复用子标签添加逻辑:用带参数的函数统一处理子标签添加。

完整示例代码

const XMLWriter = require('xml-writer');
const xw = new XMLWriter();

// 初始化XML结构,保持Hello标签开放
function createEmptyXML(xw) {
    xw.startDocument();
    xw.startElement('Hello');
    xw.writeAttribute('name', '_nameOfThePerson');
}

// 通用添加子标签函数
function addChildTag(xw, tagName) {
    xw.startElement('childTag')
      .writeAttribute('name', tagName);
    // 无内容的子标签会被xml-writer自动闭合,无需手动调用endElement
}

// 执行流程
createEmptyXML(xw);
addChildTag(xw, 'A');
addChildTag(xw, 'B');
// 所有子标签添加完成后,手动闭合Hello标签
xw.endElement();
xw.endDocument();

// 输出结果
console.log(xw.toString());

生成的正确XML

<?xml version="1.0"?>
<Hello name="_nameOfThePerson">
  <childTag name="A"/>
  <childTag name="B"/>
</Hello>

注意点

你之前预期的XML结构是无效的:<Hello .../>是自闭合标签,后面不能再跟子元素和</Hello>结束标签,必须用开放的<Hello>标签包裹子元素,最后再闭合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 19:05:08