我必须在 Node API 中接受不同类型的 xml 格式,基于定义的值需要执行相应的操作。
这是我正在尝试的代码:
var xmlparser = require('express-xml-bodyparser');
app.post('/xmlparser',xmlparser({trim: false, explicitArray: false}),function(request,reply){
var data = JSON.stringify(request.body);
var arr_data =JSON.parse(data);
//code to access and display values from the xml
console.log("xml 1:"+arr_data['ps0:tfg']['ps0:header']['ps1:messageid']);
console.log("xml 2:"+arr_data['ps1:hls']['ps1:header']['ps1:messageid']);
})
Here are the 2 different xml, that takes as an input.
xml 1:
<?xml version="1.0" encoding="UTF-8"?>
<ps0:TFG xmlns:ns0="http://www.google.com/LOGO/Common">
<ps0:Header version="1.0" xmlns:ns1="http://www.google.com/LOGO/Common">
<ps1:MessageId>MESSAGE001</ns1:MessageId>
</ps0:Header>
</ns0:TFG>
xml 2:
<?xml version="1.0" encoding="UTF-8"?>
<ps0:HLS xmlns:ns0="http://www.google.com/LOGO/Common">
<ps0:Header version="1.0" xmlns:ns1="http://www.google.com/LOGO/Common">
<ps1:MessageId>MESSAGE001</ns1:MessageId>
</ps0:Header>
</ps0:HLS>
如果我通过 xml 1,则 xml 1 打印效果很好,我使用上述相同的代码接受不同的格式。如果我传递 xml 2 作为输入,执行将在第一个控制台日志处停止,因为索引不可用。
为了解决这个问题,我需要保留一些条件,至少如果它显示未定义,那么我可以在条件中标记,如果索引不匹配,则问题代码不会执行。
更新:我也尝试过实现 try catch,但仍然没有成功。
最佳答案
您只需要添加一些简单的 if
条件来限制对无效数组索引的访问:
app.post('/xmlparser',xmlparser({trim: false, explicitArray: false}), function(request,reply) {
var data = JSON.stringify(request.body);
var arr_data = JSON.parse(data);
//code to access and display values from the xml
if (arr_data['ps0:tfg'] &&
arr_data['ps0:tfg']['ps0:header']) {
console.log("xml 1:" + arr_data['ps0:tfg']['ps0:header']['ps1:messageid']);
}
if (arr_data['ps1:hls'] &&
arr_data['ps1:hls']['ps1:header']) {
console.log("xml 2:" + arr_data['ps1:hls']['ps1:header']['ps1:messageid']);
}
})
此外,我注意到您的 xml 似乎格式错误,您以错误的方式混合了 ps0、ps1、ns0、ns1
。
关于arrays - 如何在 Node Express api 中接受不同的 xml 格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53166199/