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

XML Attribute not working in Node.js xml2js

我正在尝试用 Node.js 和 xml2js 解析 XML。在文档中说 $ 是访问属性的字符。它在我的情况下似乎不起作用。

对象 result.ApiResponse.CommandResponse 工作正常。但是我之后放的任何东西都是未定义的。

这是我的代码,上面写着 $ 未定义 :

var xml2js = require('xml2js');
var util = require('util');

var parser = new xml2js.Parser();
var xml = '<ApiResponse Status="OK"><Errors/><Warnings/><RequestedCommand>namecheap.domains.check</RequestedCommand><CommandResponse Type="namecheap.domains.check"><DomainCheckResult Domain="us.xyz" Available="true" ErrorNo="0" Description="" IsPremiumName="true" PremiumRegistrationPrice="13000.0000" PremiumRenewalPrice="13000.0000" PremiumRestorePrice="65.0000" PremiumTransferPrice="13000.0000" IcannFee="0.0000" EapFee="0.0000"/></CommandResponse><Server>PHX01APIEXT01</Server><GMTTimeDifference>--5:00</GMTTimeDifference><ExecutionTime>4.516</ExecutionTime></ApiResponse>';

parser.parseString(xml, function (err, result) {

console.log(util.inspect(result.ApiResponse.CommandResponse.DomainCheckResult.$.Available, false, null))    

});

这是 console.log(结果):

{ ApiResponse: 
   { '$': { Status: 'OK' },
     Errors: [ '' ],
     Warnings: [ '' ],
     RequestedCommand: [ 'namecheap.domains.check' ],
     CommandResponse: 
      [ { '$': { Type: 'namecheap.domains.check' },
          DomainCheckResult: 
           [ { '$': 
                { Domain: 'us.xyz',
                  Available: 'true',
                  ErrorNo: '0',
                  Description: '',
                  IsPremiumName: 'true',
                  PremiumRegistrationPrice: '13000.0000',
                  PremiumRenewalPrice: '13000.0000',
                  PremiumRestorePrice: '65.0000',
                  PremiumTransferPrice: '13000.0000',
                  IcannFee: '0.0000',
                  EapFee: '0.0000' } } ] } ],
     Server: [ 'PHX01APIEXT01' ],
     GMTTimeDifference: [ '--5:00' ],
     ExecutionTime: [ '4.516' ] } }

看起来 CommandResponseDomainCheckResult 实际上是数组,因此您需要在深入挖掘数据之前使用 [0] 访问它们的第一个元素。

console.log(util.inspect(
    result.ApiResponse.CommandResponse[0].DomainCheckResult[0].$.Available,
    false, null
))