arrays - 如何在 Node Express api 中接受不同的 xml 格式?

标签 arrays node.js xml api

我必须在 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/

相关文章:

javascript - 检测阵列阵列

node.js - sails js(node js框架)中仅在生产环境中运行函数

javascript - 通过 Github 进行身份验证(使用 everyauth)

android - 没有 xml 的动画 fragment

javascript - Node.js xml2js - 创建站点地图属性时被忽略

c - 为什么数组类型对象不可修改?

c++ - 声明 3D vector 的大小

java - 二维数组

node.js - MongoDB - 使用 nodejs 驱动程序运行并行查询并在最后一个查询完成时关闭数据库连接

java - 在 Java 中将 XML 转换为 JSON,子节点作为数组