如何在 JavaScript node.js 中将 xml 文件解析为数组

Posted

技术标签:

【中文标题】如何在 JavaScript node.js 中将 xml 文件解析为数组【英文标题】:How to parse xml file to array in JavaScript node.js 【发布时间】: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));
    );
);

【问题讨论】:

【参考方案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; ); ); 但是当我尝试使用时它是未定义的:/ 检查我的编辑,你需要一个带有回调作为参数的函数

以上是关于如何在 JavaScript node.js 中将 xml 文件解析为数组的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 javascript/node js 从数据库中将图片动态加载到网页上

如何在 Node.js 中将字符串转换为字节数组?

如何在 JavaScript 中将时间戳转换为 MySQL DateTime?

如何在 Node.js 中将文件上传到 GCloud?

在Javascript中将立体声音频转换为单声道

如何在 Node.js 中将 NTLM 凭据转换为 Kerberos 令牌