我正在使用xml2js从我的寄存器构建.xml。对于每个元素,我需要设置具有相同名称的密钥,示例:key:具有属性ID的产品
预期结果:
<products>
<product id="H12896">
<name>Grand Hotel New York</name>
<price>120.80</price>
</product>
<product id="...">
...
</product>
</products>
我的代码:
var products = [];
_.each(list, function(element) {
var obj = {
name: element.title,
price: element.price,
};
products.push(obj);
});
var builder = new xml2js.Builder({rootName: 'products'});
var xml = builder.buildObject(products);
fs.writeFile('pacotes.xml', xml, (err) => {
if (err) throw (err);
});
输出结果:
<products>
<0>
<name>Mountain Do</name>
<price>0</price>
</0>
</products>
我检查了文档,但还没有。 感谢
答案 0 :(得分:4)
您是否有理由不使用XMLBuilder? https://github.com/oozcitak/xmlbuilder-js/
XMLBuilder似乎更适合你想要做的事情,并且更受欢迎(例如:上个月有400万次下载)。 xml2js更适合在JavaScript中阅读,但XMLBuilder绝对是你想要使用的。
如果我正确阅读...... xml2js就是在XMLBuilder上构建的。
var builder = require('xmlbuilder'),
xml = builder.create('root'),
products = xml.ele('products'),
product;
_.each(list, function(element) {
product = products.ele('product');
product.att('id', element.id);
product.ele('name', null, element.name);
product.ele('price', null, element.price);
});
xml = xml.end();
fs.writeFile('pacotes.xml', xml, (err) => {
if (err) throw (err);
});
答案 1 :(得分:0)
您可以只创建对象列表,然后使用要用作键的名称:
const productList = [
{ name: 'foo', price: 30 },
{ name: 'bar', price: 5 },
{ name: 'baz', price: 87 },
];
const obj = { product: [] }
productList.forEach(element => obj.product.push({
name: element.title,
price: element.price,
}));
const builder = new xml2js.Builder({rootName: 'products'});
const xml = builder.buildObject(obj);
console.log(xml);
输出:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<products>
<product>
<name/>
<price>30</price>
</product>
<product>
<name/>
<price>5</price>
</product>
<product>
<name/>
<price>87</price>
</product>
</products>