简体   繁体   English

将node.js xml转换为json对象

[英]node.js xml to json objects

In Node, I'm trying to migrate an XML structure into JSON, which would allow me to access specific nodes without arrays, but guess issue is common for all ECMA related languages 在Node中,我试图将XML结构迁移到JSON,这将允许我访问没有数组的特定节点,但是猜测所有ECMA相关语言都存在该问题

Basically I'm looking for a way of doing this: 基本上,我正在寻找一种这样做的方法:

var siteSettings = configuration.settings.siteSettings
var site1 = siteSettings[0];
var site1Name = site1.name;

where the XML is this XML在哪里

<configuration>
  <settings>
    <siteSettings>
      <siteSetting name="site1" path="path1"/>
      <siteSetting name="site2" path="path2"/>
    <siteSettings>
  </settings>
  <modules>
    <module name="module1" action="action1">
    <module name="module2" action="action2">
  </modules>
</configuration>

However, the XML parser modules I found does something like this (pseudo): 但是,我发现的XML解析器模块执行以下操作(伪):

configuration:{
  settings:
    [siteSettings:
      [siteSetting: {name: "site1", path: "path1"}, 
       siteSetting: {name: "site2", path: "path2"}]};

What do you reccommend - am I even on right track? 您的建议是什么-我是否走上正轨?

I think you're looking for something like this: 我认为您正在寻找这样的东西:

{  
   "configuration":{  
      "settings":{  
         "siteSettings":[  
            {  
               "name":"site1",
               "path":"path1"
            },
            {  
               "name":"site2",
               "path":"path2"
            }
         ]
      },
      "modules":[  
         {  
            "name":"module1",
            "path":"action1"
         },
         {  
            "name":"module2",
            "path":"action2"
         }
      ]
   }
}

If you can assume that the XML format will never change, you could then normalize the data that you received from XML parser. 如果可以假设XML格式永远不会改变,则可以对从XML解析器收到的数据进行规范化。 This is an example based off of your psuedo XML. 这是一个基于psuedo XML的示例。

// Example of parsed XML
var xml = {
  configuration: {
    settings: [{
      siteSettings: [{
          siteSetting: {name: "site1", path: "path1"}
        },{
          siteSetting: {name: "site2", path: "path2"}
        }
      ]
    }]
  }
};


var rawSiteSettings = xml.configuration.settings[0].siteSettings;
var siteSettings = [];

// Normalize siteSettings from XML
for(var i=0; i<rawSiteSettings.length; i++){
  siteSettings.push(rawSiteSettings[i].siteSetting);
}

console.log(siteSettings); // this would equal [{name:"site1"}, {name:"site2"} ect...]

// Helper to search object by value
var getPropertyByName = function(data, value){
  for(var prop in data){
    if(data.hasOwnProperty(prop)){
      if(data[prop].name === value){ // Checking by name only
        return data[prop];
      }
    }
  }
};

var firstSite = getPropertyByName(siteSettings, "site1");
var firstSiteName = firstSite.name;
var firstSitePath = firstSite.path;

console.log('Name: ' + firstSiteName); // site1
console.log('Site Path: ' + firstSitePath); // path1

Edit: You will need to scroll. 编辑:您将需要滚动。

Edit 2: What I mean by normalizing is: you are taking 'settings' and 'siteSettings', which are both arrays inside of objects, and putting them into a workable format. 编辑2:我通过规范化的意思是:您正在使用“设置”和“ siteSettings”,它们都是对象内部的数组,并将它们设置为可行的格式。

您可以使用此简单的节点模块xml2js,请参考以下链接: https ://www.npmjs.com/package/xml2js

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM