簡體   English   中英

將node.js xml轉換為json對象

[英]node.js xml to json objects

在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM