首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Node.js使用xml2js从结果XML中删除根节点

Node.js使用xml2js从结果XML中删除根节点
EN

Stack Overflow用户
提问于 2016-07-07 11:40:40
回答 4查看 9.3K关注 0票数 9

我正在尝试从JSON创建一个XML,并在结果中给出根元素,我尝试将explicitRoot var parser = xml2js.Parser({explicitRoot:false});设置为false,但它不删除默认根标记,而只是删除原始XML根标记(<VSAT></VSAT>)

使用xml2js处理XML

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<VAST version="2.0">    
    <Ad id="72419"></Ad>
</VAST>

由此产生的XML:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<root>
<VAST version="2.0">    
<Ad id="72419"></Ad>
</VAST>
</root>

知道吗?

全码

代码语言:javascript
运行
复制
/*
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);
}
EN

回答 4

Stack Overflow用户

发布于 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版本才支持这一点。

票数 5
EN

Stack Overflow用户

发布于 2019-01-01 06:45:17

不能删除根节点,但可以这样更改其名称:

代码语言:javascript
运行
复制
 let builder = new xml2js.Builder({headless: true , explicitRoot : false , rootName :'Search_Query'});
 let xml = builder.buildObject(req.param('Search_Query'));

这将将root更改为Search_Query

票数 4
EN

Stack Overflow用户

发布于 2016-07-07 13:03:53

这太长了,不能发表评论。

使用xml2js从JSON创建XML的正确方法是使用xml2js.Builder。例如,在下面的片段中,JSON被更改为XML字符串,然后解析为JSON:

代码语言:javascript
运行
复制
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标记(这允许以后以一种干净的方式访问节点中的东西)。

现在,如果添加以下内容:

代码语言:javascript
运行
复制
var badxml = builder.buildObject(xml);
console.log(badxml);

在这个片段的末尾,您确实得到了一个带有额外root元素的XML:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>&lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;
&lt;VAST version="2.0"&gt;
  &lt;Ad id="72419"&gt;
    &lt;content&gt;yay&lt;/content&gt;
  &lt;/Ad&gt;
&lt;/VAST&gt;</root>

但它仍然与你得到的完全不同,因为它是正确逃脱的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38244545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档