【问题标题】:How to parse xml file to array in JavaScript node.js如何在 JavaScript node.js 中将 xml 文件解析为数组
【发布时间】:2016-08-14 07:08:28
【问题描述】:

我是初学者,在 Node.js 中将数据从 xml 文件解析到数组时遇到问题?

来自 xml 的数据:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <record>
       <Name>Apple</Name>
       <Code>AP</Code>
       <Price>2,5</Price>
    </record>
    <record>
       <Name>Kiwi</Name>
       <Code>KI</Code>
       <Price>1,5</Price>
    </record>
</xml>

我期望这样的数组:

var array = [
    { Name: 'Apple', Code: 'AP', Price: '2,5'},
    { Name: 'Kiwi', Code: 'KI', Price: '1,5'}
];

@EDIT - 我们更接近了

我尝试使用xml2js npm,结果是:

 {                                                            
  "xml": {                                                   
    "$": {                                                   
      "xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance
    },                                                       
    "record": [                                              
      {                                                      
        "Name": [                                            
          "Apple"                                            
        ],                                                   
        "Code": [                                            
          "AP"                                               
        ],                                                   
        "Price": [                                           
          "2,5"                                              
        ]                                                    
      },                                                     
      {                                                      
        "Name": [                                            
          "Kiwi"                                             
        ],                                                   
        "Code": [                                            
          "KI"                                               
        ],                                                   
        "Price": [                                           
          "1,5"                                              
        ]                                                    
      }                                                      
    ]                                                        
  }                                                          
}

我当前的代码:

var fs = require('fs');
var parseString = require('xml2js').parseString;

fs.readFile('test_data.xml', function(err, data){
    parseString(data, function (err, result)
    {
       console.log(JSON.stringify(result, null, 2));
    });
});

【问题讨论】:

    标签: javascript arrays xml node.js


    【解决方案1】:

    在 npm 上查看众多 XML 解析器包之一。

    例如:xml2js

    var parseString = require('xml2js').parseString;
    var xml = "<root>Hello xml2js!</root>"
    parseString(xml, function (err, result) {
        console.dir(result);
    });
    

    如果您在读取 ​​xml 文件时需要帮助,请查看 nodeJs 文件系统库。

    Doc for reading a file:

    var fs = require('fs');
    
    fs.readFile('/etc/data.xml', (err, data) => {
      if (err) throw err;
      console.log(data);
    });
    

    编辑: 在一个功能中实现所有功能:

    function loadXML(cb) {
      fs.readFile('test_data.xml', function(err, data){
        parseString(data, function (err, result) {
          cb(result.xml.record)
        });
      });
    }
    
    loadXML(function(yourRecods) {
      // do whatever
    });
    

    【讨论】:

    • @DiPix 你能发布JSON.stringify(result, null, 2); 返回的内容吗?
    • 只需使用var records = result.xml.record; 即可获得数组
    • 谢谢 :) 应该够了
    • 还有一件事,我怎样才能将此函数分配给某个变量?我试过了:var xmlData = fs.readFile('data-xml/test_data.xml', function (err, data) { parseString(data, function (err, result) { return result.xml.record; }); }); 但是当我尝试使用时它是未定义的:/
    • 检查我的编辑,你需要一个带有回调作为参数的函数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多