使用NodeJS将XML转换为JSON

xriantvc  于 4个月前  发布在  Node.js
关注(0)|答案(9)|浏览(83)

我试图将下面的xml转换为json,因此我需要获得到TS-tc-dt的Map
这里是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>

字符串
如何在NodeJS中实现这一点?

pgpifvop

pgpifvop1#

我使用xml-js - npm来获得想要的结果。
首先,我已经通过npm install xml-js安装了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);

字符串

wi3ka0sx

wi3ka0sx2#

您可以使用xml2json npm将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));

字符串
希望这对你有帮助。

p4rjhz4m

p4rjhz4m3#

如果你在xml 2 json和xml-js之间选择,那么据我所知,它们的区别是:

  • xml-js具有更少的依赖性,并且使用sax-js进行xml解析。
  • xml 2 json有更多的依赖项,包括node-expat,它需要python,在npm i期间可能会让人头疼。

还要注意的是,xml 2 json和xml-js产生的JSON有点不同。当我用xml-js替换xml 2 json时,我必须在属性中的值的位置添加“._attributes”。

x9ybnkn6

x9ybnkn64#

在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                                                                                                                                                              
}

字符串
使用echo "xml2json_example()" | node -r xml2json.es6进行测试,源位于https://github.com/brauliobo/biochemical-db/blob/master/lib/xml2json.es6

jvidinwx

jvidinwx5#

Cruftless允许你“注解”你想要匹配的数据结构,以指定它应该如何绑定到相同数据的JSON表示。
所以,如果你像这样定义你的模板:

<TestScenario>
  <TestSuite name="{{name}}"><?bind suites|array?>
    <TestCaseName name="{{name}}">{{data}}</TestCaseName><?bind cases|array?>
  </TestSuite>
</TestScenario>

字符串
然后,通过调用.fromXML创建的对象,传入你想要解析的XML,你会得到:

{
  suites: [
    { name: 'tc_Logout', data: 'dt_EdgeCaseRoute' },
    {
      name: 'tc_AddContract',
      data: 'dt_EdgeCaseHome,dt_EdgeCaseSpectrum'
    },
    { name: 'tc_Payment', data: 'dt_EdgeCaseRoute' },
    { name: 'tc_ClientFeedback', data: 'dt_EdgeCaseSpectrum' }
  ]
}

jbose2ul

jbose2ul6#

您也可以尝试camaro

const { transform } = require('camaro')

const 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>
`

;(async function () {
    const result = await transform(xml, {
        testSuites: [
            '/TestScenario/TestSuite',
            {
                name: '@name',
                testCases: ['TestCaseName', {
                    name: '@name',
                    data: '.'
                }]
            }
        ]
    })

    console.log(JSON.stringify(result, null, 2))
})()

字符串
产出:

{
  "testSuites": [
    {
      "name": "TS_EdgeHome",
      "testCases": [
        {
          "name": "tc_Login",
          "data": "dt_EdgeCaseHome,dt_EdgeCaseRoute"
        },
        {
          "name": "tc_Logout",
          "data": "dt_EdgeCaseRoute"
        }
      ]
    },
    {
      "name": "TS_EdgePanel",
      "testCases": [
        {
          "name": "tc_AddContract",
          "data": "dt_EdgeCaseHome,dt_EdgeCaseSpectrum"
        }
      ]
    },
    {
      "name": "TS_EdgeRoute",
      "testCases": [
        {
          "name": "tc_VerifyContract",
          "data": "dt_EdgeCaseRoute"
        },
        {
          "name": "tc_Payment",
          "data": "dt_EdgeCaseRoute"
        }
      ]
    },
    {
      "name": "TS_EdgeSpectrum",
      "testCases": [
        {
          "name": "tc_ClientFeedback",
          "data": "dt_EdgeCaseSpectrum"
        }
      ]
    }
  ]
}

t3irkdon

t3irkdon7#

var fs = require('fs');

var xml2json = require('xml2js');

var parser = new xml2json.Parser();
var i = 0;
fs.readFile('note.xml', function(err,data){
    parser.parseString(data, function(err, result){  
        console.log(result);
    });
});

字符串

webghufk

webghufk8#

如果您有一个XML文件,那么您可以使用nodejs中fs读取XML文件,然后可以使用“xml2json”npm包。

const parser = require('xml2json');
    const fs = require("fs")


    fs.readFile(uploadedFilePath, function(err,data){

        if(err) {
            return res.send({message:err});
        } else {

            jsonfile = JSON.parse(parser.toJson(data,{reversible: true}));

        }

    });

字符串

zaqlnxep

zaqlnxep9#

步骤1:设置Node.js项目

第一步是设置一个Node.js项目(如果您还没有)。导航到您想要的项目目录,并在您的终端中运行以下命令:

mkdir json-converter
cd json-converter
npm init -y

字符串
这将创建一个新的Node.js项目,其中包含一个默认的package.json文件。

步骤2:安装依赖项

要在Node.js中将XML转换为JSON,我们将使用xml2js库,这是解析XML数据的常用选择。

npm install xml2js


这个库提供了一个简单的API,用于将XML转换为JSON,反之亦然。

步骤3:创建XML文件

为了进行演示,让我们在项目目录中创建一个示例XML文件(input.xml):

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
  <book>
    <title>Node.js Guide</title>
    <author>John Doe</author>
    <price>29.99</price>
  </book>
  <book>
    <title>Web Development Basics</title>
    <author>Jane Smith</author>
    <price>19.95</price>
  </book>
</bookstore>

步骤4:创建Node.js脚本

现在,在项目目录中创建一个新文件(例如convertjson.js),并编写以下代码:

const fs = require('fs');
const xml2js = require('xml2js');

// Read the XML file
const xml = fs.readFileSync('input.xml');

// Convert the XML to JSON
xml2js.parseString(xml, { mergeAttrs: true }, (err, result) => {
  if (err) {
    throw err;
  }
  // The result is now a JavaScript object
  const json = JSON.stringify(result, null, 2);

  // Save the JSON to a file
  fs.writeFileSync('output.json', json);
});

第5步:运行脚本

通过运行以下命令来执行脚本:

node convertjson.js


这将读取XML数据,将其转换为JSON,并将结果写入一个新文件(data.json)。现在可以检查转换后的JSON数据。

相关问题