0

Node.js と xml2js で XML を解析しようとしています。ドキュメントには、 $ は属性にアクセスするための文字であると書かれています。私の場合はうまくいかないようです。

オブジェクト result.ApiResponse.CommandResponse は正常に動作します。しかし、その後に入れたものはすべて未定義です。

これが私のコードです。 $ is undefined と書かれています:

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' ] } }
4

1 に答える 1

2

CommandResponse配列のように見え、実際には配列であるため、データを深く掘り下げる前にDomainCheckResult、 を使用して最初の要素にアクセスする必要があります。[0]

console.log(util.inspect(
    result.ApiResponse.CommandResponse[0].DomainCheckResult[0].$.Available,
    false, null
))
于 2016-12-10T01:25:46.780 に答える