2016-04-07 14 views
0

POST API'mma gelen yanıtın gövdesinden birden fazla XML etiketini ayrıştırma sorunları yaşıyorum. İstekte bulunan metnin veya bağlı kuruluş etiketinin yerleşimini takas edebilirim ve uygulama her zaman üst etiketi değil, diğerini ayrıştırır. Herhangi bir yardım takdir edilir. İstekte vücudunNeden sadece bir XML etiketini node.js ekspres API POST'sundan ayrıştırayım?

//Express 
var app = express(); 
router.use(bodyParser.json()); 
router.use(xmlparser()); 

router.post('/api/v1/inboundData', function(req, res) { 

var results = []; 

// Grab data from http request 
var data = {text: req.body.text, affiliate: req.body.affiliate}; 

// Get a Postgres client from the connection pool 
pg.connect(connectionString, function(err, client, done) { 
    // Handle connection errors 
    if(err) { 
     done(); 
     console.log(err); 
     return res.status(500).json({ success: false, data: err}); 
    } 

    // SQL Query > Insert Data 
    client.query("INSERT INTO \"inboundData\"(\"data\", \"affiliate\") values($1, $2)", [data.text, data.affiliate]); 

    // SQL Query > Select Data 
    var query = client.query("SELECT * FROM \"inboundData\" ORDER BY \"ID\" DESC"); 

    // Stream results back one row at a time 
    query.on('row', function(row) { 
     results.push(row); 
    }); 

    // After all data is returned, close connection and return results 
    query.on('end', function() { 
     done(); 
     return res.json(results); 
    }); 
}); 
}); 

İçindekiler:

<?xml version="1.0" encoding="utf-8"?> 
<text>blah</text> 
<affiliate>xmltest</affiliate> 

cevap

1

XML'niz geçersiz. Bu iki unsuru sarmalayan tek bir kök elemanı olmalıdır.

http://www.xmlvalidation.com/ ile doğrulamayı deneyebilirsiniz. gösterilen hatadır: XML belgesinde

Hatalar: kök öğeyi takip belgede biçimlendirme şekilde biçimlendirilmiş olması gerekir .

Bu XML sorunu çözmek gerekir:

<?xml version="1.0" encoding="utf-8"?> 
<content> 
    <text>blah</text> 
    <affiliate>xmltest</affiliate> 
</content> 

emin değilim, ama muhtemelen bu şekilde javascript vücudu okuma biçimini değiştirmek gerekir:

// Grab data from http request 
var data = {text: req.body.content.text, affiliate: req.body.content.affiliate}; 
+0

Cevabınız için teşekkür ederiz. Kullandığım XML, çevrimiçi araçta geçerliliği geçer, ancak yönteminizi kullanarak daha iyi sonuçlar elde ediyorum. Yine de birkaç soru. 1: kodunuzu kullanırken db insertime giren değerler ham metin dizeleri değil, bunlar gibi özel karakterler içerir: {\ "blah \"}, {\ "xmltest \"}. JSON ile yayınlamadan önce sadece blah veya xmltest dizesi eklenirdi. Herhangi bir fikir? Ayrıca, eşleştirilen JSON nesnesi, gönderdiğiniz xml için neye benziyordu? {"Content" ı denedim: [ {"text": "blah", "affiliate": "xmltest"} ]} – Eagledare

+0

Gönderilen XML'yi nasıl oluşturuyorsunuz? Bu özel karakterler müşteriden geliyor gibi görünüyor. Bunu doğrulayabilir misin? Bu XML için JSON eşdeğeri {"content": {"text": "blah", "affiliate": "xmltest"}}, tıpkı yazdığınız gibi, ancak parantez içermez. – goenning