2016-05-16 15 views
5

Sto sviluppando un'applicazione mobile da react-native, Devo chiamare un servizio di odata che restituisce XML e ho bisogno di convertirlo in oggetto json.Come utilizzare la risposta XML in nativo reattivo

Come devo fare?

return fetch(url, { 
     method: 'GET', 
     headers: { 
     Authorization: config.api.auth, 
     }, 
    }) 
     .then(response => response.json()) 
     // .then(response => response.text()) 
     // .then(xml => _xmlToJson(xml)) 
     .then(json => dosomething(json)) 
     .catch(ex => showError(ex)); 
    }; 

ho cercato di ottenere text() invece su json() e passarlo a un altro metodo che converte xml al json ma il problema è che il metodo ha bisogno di una stringa xml object ma text() rendimenti, e non riuscivo a trovare un modo in react-native convertire string in xml.

p.s. Dal momento che Reagire nativo utilizzando JavaScriptCore, che è solo un interprete JavaScript, in modo che nessun Browser Object Model, nessun oggetto del documento, nessuna finestra, ecc può essere utilizzato

risposta

1

È possibile utilizzare qualsiasi libreria xml2js c'è nel regno del nodo, per esempio https://github.com/Leonidas-from-XIV/node-xml2js

+1

ottengo questo errore sull'installazione di esso, 'non riuscita al [email protected] script di installazione 'rebuild'' nodo-gyp e non ho potuto risolverlo :( – RezaRahmati

+0

Siamo spiacenti, ho scelto il quello sbagliato. Ho modificato la risposta, per favore dai un'occhiata a questa –

+0

Sì, l'ho trovata ieri e si converte in json ma l'oggetto json di uscita non è buono, converte i valori in array, quindi per ottenere una semplice stringa che mi serve leggerlo dalla matrice. BTW grazie – RezaRahmati

1

Sebbene risposta di Daniel Schmidt è corretta, ho usato il modo in cui viene descritto in questo articolo, Build a YouTube playlist browser with React Native and Siphon

npm install xmldom 

var DOMParser = require('xmldom').DOMParser; 

parseVideos: function(s) { 
    console.log('Parsing the feed...'); 
    var doc = new DOMParser().parseFromString(s, 'text/xml'); 
    var objs = []; 
    var videos = doc.getElementsByTagName('yt:videoId'); 
    var thumbs = doc.getElementsByTagName('media:thumbnail'); 
    for (var i=0; i < videos.length; i++) { 
    objs.push({ 
     id: videos[i].textContent, 
     thumbnail: thumbs[i].getAttribute('url') 
    }) 
    } 
    this.setState({videos: objs}); 
},