node.js xml to json objects

node.js xml to json objects

本文关键字:json objects to xml js node      更新时间:2023-09-26

在Node中,我试图将XML结构迁移到JSON中,这将允许我访问没有数组的特定节点,但猜测问题对于所有ECMA相关语言都是常见的

基本上我在寻找一种方法来做到这一点:

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

这里的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>

然而,我发现的XML解析器模块做了这样的事情(伪):

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

你有什么建议吗?我走对了吗?

我想你在找这样的东西:

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

如果可以假设XML格式永远不会改变,那么就可以规范化从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

编辑:你需要滚动。

编辑2:我的意思是:你正在采取'设置'和'siteSettings',这两个数组内的对象,并把它们变成一个可行的格式。

您可以使用这个简单的节点模块xml2js请参阅以下连结:https://www.npmjs.com/package/xml2js