使用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是属性名称的一部分,而不是属性本身。您可以使用上面显示的数组表示法来解决它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用 xml2js 解析的问题

来自分类Dev

如何使用browserify模块为浏览器调整xml2js节点模块?

来自分类Dev

读取特定的XML节点

来自分类Dev

XML不读取特定节点

来自分类Dev

使用LINQ读取特定子节点的值

来自分类Dev

删除特定的xml节点Javascript

来自分类Dev

在Angular 2中使用JS库xml2js

来自分类Dev

在Angular 2中使用JS库xml2js

来自分类Dev

将XML解析为JSON并使用xml2js和xmlbuilder返回...

来自分类Dev

使用xml2js构建具有相等子键的xml?

来自分类Dev

使用lib xml2js向XML添加前缀

来自分类Dev

如何使用javascript读取具有多个节点的xml文件

来自分类Dev

使用Node.JS xml2js将XML转换为JSON时处理XML属性

来自分类Dev

使用Node.js / Express / xml2js解析具有多个<?xml>标记的XML文件

来自分类Dev

xml2js不解析通过代理检索的xml

来自分类Dev

Node.js Xml2js来自属性的结果

来自分类Dev

xml2js,属性名称包含连字符

来自分类Dev

xml2js valueProcessor删除\ t和\ n

来自分类Dev

xml2js 不返回解析的 JSON

来自分类Dev

Aerospike:使用二级索引从特定节点读取记录

来自分类Dev

使用Ajax读取XML节点

来自分类Dev

使用LINQ读取XML节点

来自分类Dev

使用RapidXML读取XML节点

来自分类Dev

从XML节点读取值?

来自分类Dev

读取xml节点属性

来自分类Dev

从XML节点读取值?

来自分类Dev

XML属性在Node.js xml2js中不起作用

来自分类Dev

如何在PowerShell中从不同的xml节点动态读取特定的XML属性

来自分类Dev

如何在xml2js中删除和更新XML标签