使用NodeJS将XML转换为JSON

Din*_*esh 9 xml json node.js npm

我正在尝试将以下xml转换为json,因此我需要获取到TS-tc-dt的映射

这是XML

<?xml version="1.0" encoding="UTF-8"?>
<TestScenario>
   <TestSuite name="TS_EdgeHome">
      <TestCaseName name="tc_Login">dt_EdgeCaseHome,dt_EdgeCaseRoute</TestCaseName>
      <TestCaseName name="tc_Logout">dt_EdgeCaseRoute</TestCaseName>
   </TestSuite>
   <TestSuite name="TS_EdgePanel">
      <TestCaseName name="tc_AddContract">dt_EdgeCaseHome,dt_EdgeCaseSpectrum</TestCaseName>
   </TestSuite>
      <TestSuite name="TS_EdgeRoute">
      <TestCaseName name="tc_VerifyContract">dt_EdgeCaseRoute</TestCaseName>
      <TestCaseName name="tc_Payment">dt_EdgeCaseRoute</TestCaseName>
   </TestSuite>
   <TestSuite name="TS_EdgeSpectrum">
      <TestCaseName name="tc_ClientFeedback">dt_EdgeCaseSpectrum</TestCaseName>
   </TestSuite>
</TestScenario>
Run Code Online (Sandbox Code Playgroud)

如何在NodeJS中实现呢?

Din*_*esh 15

我用xml-js-npm来获得想要的结果。

首先,我通过安装了xml-js npm install xml-js

然后使用以下代码获取json格式的输出

var convert = require('xml-js');
var xml = require('fs').readFileSync('./testscenario.xml', 'utf8');

var result = convert.xml2json(xml, {compact: true, spaces: 4});
console.log(result);
Run Code Online (Sandbox Code Playgroud)


Dhi*_*iya 14

您可以使用xml2jsonnpm将xml转换为json。xml2json

步骤1:-在您的项目中安装软件包

npm install xml2json

步骤2:-您可以使用该包并将xml转换为json

let xmlParser = require('xml2json');
let xmlString = `<?xml version="1.0" encoding="UTF-8"?>
<TestScenario>
   <TestSuite name="TS_EdgeHome">
      <TestCaseName name="tc_Login">dt_EdgeCaseHome,dt_EdgeCaseRoute</TestCaseName>
      <TestCaseName name="tc_Logout">dt_EdgeCaseRoute</TestCaseName>
   </TestSuite>
   <TestSuite name="TS_EdgePanel">
      <TestCaseName name="tc_AddContract">dt_EdgeCaseHome,dt_EdgeCaseSpectrum</TestCaseName>
   </TestSuite>
      <TestSuite name="TS_EdgeRoute">
      <TestCaseName name="tc_VerifyContract">dt_EdgeCaseRoute</TestCaseName>
      <TestCaseName name="tc_Payment">dt_EdgeCaseRoute</TestCaseName>
   </TestSuite>
   <TestSuite name="TS_EdgeSpectrum">
      <TestCaseName name="tc_ClientFeedback">dt_EdgeCaseSpectrum</TestCaseName>
   </TestSuite>
</TestScenario>`;

console.log('JSON output', xmlParser.toJson(xmlString));
Run Code Online (Sandbox Code Playgroud)

希望这对您有帮助。

  • xml2json 未更新,可在旧依赖项上工作,并且不会安装在 Nodejs 上 (2认同)

Sta*_*lav 11

如果您在 xml2json 和 xml-js 之间进行选择,那么据我所知,它们之间的区别是:

  • xml-js 的依赖要少得多,并且使用 sax-js 进行 xml 解析。
  • xml2json 具有更多依赖项,包括需要 python 的 node-expat,并且在 npm i 期间可能会令人头疼。但是 node-expat 声称比 sax-js 快约 3 倍。

还要注意 xml2json 和 xml-js 产生的 JSON 有点不同。当我用 xml-js 替换 xml2json 时,我必须在属性值所在的任何地方添加“._attributes”。


bra*_*obo 7

6 行简单的 ES6 代码:

xml2json = xml => {                                                                                                                                                     
  var el = xml.nodeType === 9 ? xml.documentElement : xml                                                                                                               
  var h  = {name: el.nodeName}                                                                                                                                          
  h.content    = Array.from(el.childNodes || []).filter(e => e.nodeType === 3).map(e => e.textContent).join('').trim()                                                  
  h.attributes = Array.from(el.attributes || []).filter(a => a).reduce((h, a) => { h[a.name] = a.value; return h }, {})                                                 
  h.children   = Array.from(el.childNodes || []).filter(e => e.nodeType === 1).map(c => h[c.nodeName] = xml2json(c))                                                    
  return h                                                                                                                                                              
}
Run Code Online (Sandbox Code Playgroud)

使用https://github.com/brauliobo/biochemical-db/blob/master/lib/xml2json.es6echo "xml2json_example()" | node -r xml2json.es6的源代码进行测试

  • 这会丢失混合内容和元素排序(属性排序无论如何都是由解析器选择的)。无论如何,许多人都拒绝混合内容,所以……这不是问题,只是一些用户可能会关心。 (2认同)