繁体   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