簡體   English   中英

使用XML2JS javascript讀取特定節點的問題

[英]Issue reading specific node using XML2JS javascript

我正在嘗試整理一些JavaScript,以從網絡上的空調讀取信息。 我不是開發人員,因此可能會丟失某些內容,因為我使用的代碼是從此處和其他地方的一些示例中提取的。 當我將其與某些示例服務器一起使用時,我可以使其不與XML一起工作。

這是XML:

<?xml version="1.0" encoding="UTF-8" ?>
<iZS10.3>
<request>getSystemData</request>
<mac>001ec0a14c2e</mac>
<authenticated>1</authenticated>
<system>
<type>12</type>
<name>MYAIR3</name>
<MyAppRev>7.4</MyAppRev>
<zoneStationHasUnitControl>4</zoneStationHasUnitControl>
<dhcp>1</dhcp>
<ip>192.168.1.200</ip>
<netmask>255.255.255.0</netmask>
<gateway>192.168.1.1</gateway>
<unitcontrol>
<airconOnOff>1</airconOnOff>
<fanSpeed>3</fanSpeed>
<mode>2</mode>    
<unitControlTempsSetting>0</unitControlTempsSetting
<centralActualTemp>20.3</centralActualTemp>
<centralDesiredTemp>24.0</centralDesiredTemp>
<airConErrorCode>    </airConErrorCode>
<activationCodeStatus>0</activationCodeStatus
><numberOfZones>8</numberOfZones>
<maxUserTemp>32.0</maxUserTemp>
<minUserTemp>16.0</minUserTemp>
<availableSchedules>8</availableSchedules>
</unitcontrol>
<zs103TechSettings>
<numberofConstantZones>1</numberofConstantZones>
<zsConstantZone1>1</zsConstantZone1>
<zsConstantZone2>0</zsConstantZone2>
<zsConstantZone3>0</zsConstantZone3>
<tempSensorSelect>0</tempSensorSelect>
<returnAirOffset>0.0</returnAirOffset>
<controlZoneNumber>0</controlZoneNumber>
<newAirFitted>0</newAirFitted>
<ACinfo>0</ACinfo>
<systemID>16</systemID>
</zs103TechSettings>
</system>
</iZS10.3>

我的代碼:

var options = {
   hostname: '192.168.1.200',
   port: 80,
   path: '/getSystemData',
   method: 'GET'
};


var req = http.request(options, function(res) {
    res.setEncoding('utf8');
    res.on('data', function (systemdata) {
parseString(systemdata,{trim:true,childkey:9,explicitArray:false,explicitChildren:false}, 
function (err, result) {
           var output= (result);
           console.dir (output);
           console.log(JSON.stringify(result, null, 4));
          console.log("End");
       });
    });
});

req.on('error', function(e) {
    console.log('problem with request: ' + e.message);
});
req.end();

您會注意到,我的var輸出僅寫在此處以返回結果。 如果我這樣做,它將成功地帶回XML輸出的第一個節點。 如果我嘗試讓它帶回特定元素,即

var output= (result.iZS10.3.system.unitcontrol.centralActualtemp);

    /Users/Documents/workspace/XML Stream/xml2js.js:43
          var output= (result.iZS10.3.system.unitcontrol.centralActualtemp);
                                   ^^
SyntaxError: Unexpected number
    at Module._compile (module.js:439:25)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:906:3

有什么方法可以在輸出行中對此進行格式化嗎?

如果我只是要求沒有節點的結果。

{ 'iZS10.3': 
   { request: 'getSystemData',
     mac: '001ec0a14c2e',
     authenticated: '1',
     system: 
      { type: '12',
        name: 'MYAIR3',
        MyAppRev: '7.4',
        zoneStationHasUnitControl: '4',
        dhcp: '1',
        ip: '192.168.1.200',
        netmask: '255.255.255.0',
        gateway: '192.168.1.1',
        unitcontrol: [Object],
        zs103TechSettings: [Object] } } }

我的stringify可以毫無問題地帶回每個級別和屬性。

console.log(JSON.stringify(result, null, 4));

result.iZS10.3.system包含以下結構:

result: {
    iZS10: {
        3: {
            system: ...
        }
    }
}

您可能正在尋找result["iZS10.3"].system ,這意味着以下結構:

result: {
    iZS10.3: {
        system: ...
    }
}

最初方法的問題在於,點用於尋址嵌套屬性,但是.3是屬性名稱的一部分,而不是屬性本身。 您可以使用上面顯示的數組符號來解決它。

暫無
暫無

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

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