使用xml2js构建XML:如何生成单products节点包含多artnr子节点
使用xml2js生成包含多子节点的XML数组问题解决
问题描述
期望生成的XML结构:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <orderdetails> ..... <products> <artnr>05633310000</artnr> <artnr>05633310000</artnr> </products> </orderdetails>
实际生成的错误XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <orderdetails> <products> <artnr>05633310000</artnr> </products> <products> <artnr>05633310000</artnr> </products> </orderdetails>
已尝试设置explicitArray: true但无效,需实现单个<products>节点包含多个<artnr>子节点。
解决方案
问题核心是JS对象的结构错误,explicitArray是xml2js解析XML转JS对象的配置,不影响生成XML的规则。要达到预期效果,需按以下方式构建数据:
正确的JS数据结构
const data = { orderdetails: { // 此处填写orderdetails下的其他字段 products: { artnr: ["05633310000", "05633310000"] } } };
生成XML的代码示例
const xml2js = require('xml2js'); const builder = new xml2js.Builder(); const xml = builder.buildObject(data); console.log(xml);
关键注意点
- xml2js生成XML时,会自动将JS数组转为同一父节点下的多个同名子节点
- 之前错误是因为把
products设为数组(如products: [{artnr: "xxx"}, {artnr: "xxx"}]),导致生成多个<products>节点 - 必须保证
products是单个对象,其内部的artnr为数组类型
内容的提问来源于stack exchange,提问作者Chris Hunter-Johnson
相关产品推荐
相关产品推荐

