xml2js'nin parçalarını xml ile ayrıştırabildiğini göremiyorum, dolayısıyla tüm http yanıtını arabelleğe almamız gerekiyor. Bunu yapmak için burada global kullandım, ancak concat-stream
gibi bir şey kullanmak daha iyidir (bunu daha sonra göndereceğim).
Ben bunu denedim ve benim için çalışıyor: tepkisi gönderirken uçları Yalnızca
var eyes = require('eyes');
var https = require('https');
var fs = require('fs');
var xml2js = require('xml2js');
var parser = new xml2js.Parser();
parser.on('error', function(err) { console.log('Parser error', err); });
var data = '';
https.get('https://tsdrapi.uspto.gov/ts/cd/casestatus/sn78787878/info.xml', function(res) {
if (res.statusCode >= 200 && res.statusCode < 400) {
res.on('data', function(data_) { data += data_.toString(); });
res.on('end', function() {
console.log('data', data);
parser.parseString(data, function(err, result) {
console.log('FINISHED', err, result);
});
});
}
});
, o zaman XML ayrıştırmak. xml2js
, akış desteğine sahip gibi görünen ancak xml2js
'un avantajından yararlanıp yararlanmadığından emin olmayan sax
kullanır.
Chunk-by-chunk çözümleme (örneğinizle benzer şekilde) kullanan küçük bir örnek oluşturdum, ancak geçersiz bir xml dosyasında geldiği için ayrıştırma sırasında hata veriyor ve bu nedenle yanıtın tamamını kapatmamız gerekiyor.
xml'niz çok büyükse, akış desteğine sahip sax
gibi farklı ayrıştırıcılar kullanmayı deneyin.
error
işleyicisini, hatalarla karşılaştırabilmek için parser
'a ekleyebilirsiniz. concat akışıyla
Concat akışı
yapabilirsiniz daha zarif concat tüm .on('data'...)
çağrılar:
var https = require('https');
var xml2js = require('xml2js');
var parser = new xml2js.Parser();
var concat = require('concat-stream');
parser.on('error', function(err) { console.log('Parser error', err); });
https.get('https://tsdrapi.uspto.gov/ts/cd/casestatus/sn78787878/info.xml', function(resp) {
resp.on('error', function(err) {
console.log('Error while reading', err);
});
resp.pipe(concat(function(buffer) {
var str = buffer.toString();
parser.parseString(str, function(err, result) {
console.log('Finished parsing:', err, result);
});
}));
});
Sen (xml dosyaları büyük durumunda) tüm dosyayı tampon değil muktedir sax
kullanabilirsiniz Ancak daha düşük seviyededir, ancak bir akış olarak boruları birbirine çok benzer.
Yazım hatası var, '' 'var https = required ('https')' '' olmalıdır.Bunu tamir ettikten sonra benim için çalışıyor. –
@Edin M Bunu işaret ettiğiniz için teşekkür ederiz. Sorun giderme işleminden sonra kopyalama/yapıştırma işleminden önce bunu düzeltmeyi unuttum. Ne yazık ki, gerçek siteye erişmeye çalışırken aynı problemle karşılaşıyorum. – Ken
Son noktaya tekrar ulaşılabilir, cevabım işe yarıyor. Umarım memnuniyeti için –