我必须根据需要执行相应操作的定义值,在节点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']);
})
这是输入的2种不同的xml。
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,但还是没有运气。
答案 0 :(得分:0)
问题可能是由于XML和Javascript / JSON都区分大小写。
例如,
value
同样,在XML const c = { alpha: 42 };
console.log(c.alpha) // ---> 42
console.log(c.Alpha) // ---> undefined
中,标记与<ns1:MESSAGEID>
不同。
您用来解析XML的任何程序包都可能会弄乱这种情况,但是对我来说,这几乎是不可能的-任何不符合标准的程序包。