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

Node.js使用xmlbuilder2创建XML时Listings节点自闭合问题

问题根因

<Listings>被渲染为自闭合标签、子节点未正确嵌套的核心原因是节点操作指针错误:

  1. 你执行xml.ele('Listings')创建Listings节点后,没有保存该节点的返回引用,后续操作始终停留在根节点ListingDataFeed层级
  2. 循环内调用xml.ele('Listing')是直接在根节点下创建Listing子节点,和空的Listings节点完全平级
  3. 循环后直接写.up()属于无效语法:for循环语句没有返回值,根本无法触发链式调用闭合Listings节点
  4. 没有任何子节点的Listings节点,最终序列化时就会被输出为自闭合标签<Listings/>
修复代码

取消你注释掉的Listings节点引用代码,循环内所有新增Listing的操作都基于Listings节点实例执行即可,不需要在循环后额外调用up()方法:

var xml = builder.create('ListingDataFeed', { version: '1.0', encoding: "UTF-8"});
// 持有Listings节点引用,创建后操作指针自动停在Listings节点
var listings = xml.ele('Listings');

for(var i = 0; i < result.length; i++){
    // 基于listings节点添加Listing子节点,保证嵌套关系正确
    listings.ele('Listing')
        .ele('ListingID', `${result[i].sku}`).up()
        .ele('Title').dat(`${result[i].name}`).up()
        .ele('TransactionType', `${transaction}`).up()
        .ele('PublicationType', `${type_offer}`).up()
        .ele('DetailViewUrl', 'https://sortinvestimentos.com.br/imovel/' + `${result[i].url}`).up()
        .ele('Media')
            .ele('Item', {'medium': 'image'}, `${result[i].media_1}`).up()
        .up() // 闭合Media节点
        .ele('ContactInfo')
            .ele('Name', 'Sort Investimentos').up()
            .ele('Email', 'contato@sortinvestimentos.com.br').up()
        .up() // 闭合ContactInfo节点
    .up() // 闭合当前Listing节点
}

var root = xml.end({ pretty: true });
逻辑说明

xmlbuilder的链式调用规则是:调用ele()创建子节点后,返回值是新建的子节点实例,操作指针会移动到该子节点上,调用up()才会将指针移回父节点。只要始终持有正确的父节点实例、基于对应实例添加子元素,就不会出现节点错位、空节点自闭合的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:48:19