如何在节点js api

时间:2018-11-05 19:58:02

标签: arrays node.js xml rest api

我必须根据需要执行相应操作的定义值,在节点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,但还是没有运气。

1 个答案:

答案 0 :(得分:0)

问题可能是由于XML和Javascript / JSON都区分大小写。

例如,

value

同样,在XML const c = { alpha: 42 }; console.log(c.alpha) // ---> 42 console.log(c.Alpha) // ---> undefined 中,标记与<ns1:MESSAGEID>不同。

您用来解析XML的任何程序包都可能会弄乱这种情况,但是对我来说,这几乎是不可能的-任何不符合标准的程序包。