2016-12-10 1 views
0

Я пытаюсь разобрать XML с помощью Node.js и xml2js. В документации говорится, что $ является символом доступа к атрибутам. Кажется, он не работает в моем случае.XML-атрибут не работает в Node.js xml2js

Результат объекта.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' ] } } 

ответ

1

Похоже CommandResponse и DomainCheckResult фактически массивы, так что вам нужно чтобы получить доступ к своим первым элементам, используя [0], прежде чем углубляться в ваши данные.

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

спасибо, что сработало. –