我正在尝试从JSON创建一个XML,并在结果中给出根元素,我尝试将explicitRoot var parser = xml2js.Parser({explicitRoot:false});
设置为false,但它不删除默认根标记,而只是删除原始XML根标记(<VSAT></VSAT>)
。
使用xml2js处理XML
<?xml version="1.0" encoding="utf-8"?>
<VAST version="2.0">
<Ad id="72419"></Ad>
</VAST>
由此产生的XML:
<?xml version="1.0" encoding="utf-8"?>
<root>
<VAST version="2.0">
<Ad id="72419"></Ad>
</VAST>
</root>
知道吗?
全码
/*
NodeJS server
*/
var http = require('http');
var xml2js = require('xml2js');
var fs = require('fs');
var util = require('util');
var json,PORT=2000;
var server = http.createServer(function(request, response){
response.writeHead(200,{'Content-Type':'text/html'});
try{
var filedata = fs.readFileSync('vast_all.xml','ascii');
var parser = xml2js.Parser({explicitRoot:true});
parser.parseString(filedata.substring(0,filedata.length),function(err,result){
result.new = 'test';
json = JSON.stringify(result);
var builder = new xml2js.Builder({
xmldec:{ 'version': '1.0', 'encoding': 'UTF-8' },
cdata:true,
});
var xml = builder.buildObject(json);
response.write(json);
/*console.log(util.inspect(builder, false, null));*/
});
response.end();
}
catch(e){
console.log(e);
}
});
console.log("Server running at port "+PORT);
try{
server.listen(PORT);
}
catch(e){
console.log(e);
}
发布于 2017-09-05 12:20:15
在实例化生成器时,将headless
设置为true,例如:
let builder = new xml2js.Builder({headless: true});
这对我有用。它删除了:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
但是只有0.4.3
版本才支持这一点。
发布于 2019-01-01 06:45:17
不能删除根节点,但可以这样更改其名称:
let builder = new xml2js.Builder({headless: true , explicitRoot : false , rootName :'Search_Query'});
let xml = builder.buildObject(req.param('Search_Query'));
这将将root
更改为Search_Query
。
发布于 2016-07-07 13:03:53
这太长了,不能发表评论。
使用xml2js
从JSON创建XML的正确方法是使用xml2js.Builder
。例如,在下面的片段中,JSON被更改为XML字符串,然后解析为JSON:
var fs = require('fs');
var xml2js = require('xml2js');
var data = { VAST: { '$': { version: '2.0' }
, Ad: { '$': { id: '72419' }, content: "yay" } } };
console.log("the JSON");
console.log(JSON.stringify(data));
// the JSON
// {"VAST":{"$":{"version":"2.0"},"Ad":{"$":{"id":"72419"},"content":"yay"}}}
var builder = new xml2js.Builder();
var xml = builder.buildObject(data);
console.log("result from xml2js.builder");
console.log(xml); // this is a string
// result from xml2js.builder
// <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
// <VAST version="2.0">
// <Ad id="72419">
// <content>yay</content>
// </Ad>
// </VAST>
var parser = new xml2js.Parser();
parser.parseString(xml, function(err, result) {
console.log("result of parsing it back");
console.log(JSON.stringify(result));
console.log(result.VAST['Ad'][0]['$']['id']); // you can get the id back
});
// result of parsing it back
// {"VAST":{"$":{"version":"2.0"},"Ad":[{"$":{"id":"72419"},"content":["yay"]}]}}
// 72419
解析器添加了一个额外的数组("Ad":[{"$"
),因为您可以有多个Ad
标记(这允许以后以一种干净的方式访问节点中的东西)。
现在,如果添加以下内容:
var badxml = builder.buildObject(xml);
console.log(badxml);
在这个片段的末尾,您确实得到了一个带有额外root
元素的XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root><?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<VAST version="2.0">
<Ad id="72419">
<content>yay</content>
</Ad>
</VAST></root>
但它仍然与你得到的完全不同,因为它是正确逃脱的。
https://stackoverflow.com/questions/38244545
复制相似问题