2015-04-22 57 views
16

我是React-Native的新手。試圖製作一些非常簡單的應用程序。無法弄清楚如何獲取XML數據。使用JSON,一切都很簡單明瞭。React-Native提取XML數據

但是如何獲取XML?試圖通過this和一些其他類似的腳本將其轉換爲JSON,但沒有任何成功。需要幫助:/

我的代碼看起來很簡單:

var xml_url = 'http://api.example.com/public/all.xml'; 

var ExampleProject = React.createClass({ 
    getInitialState: function() { 
    return { 
     data: {results:{}}, 
    }; 
    }, 
    componentDidMount: function() { 
    this.fetchData(); 
    }, 
    fetchData: function() { 
    fetch(xml_url) 
     .then((response) => response.json()) 
     .then((responseData) => { 
     this.setState({ 
      data: responseData.data, 
     }); 
     }) 
     .done(); 
    }, 

    render: function() { 
    return (
     <View style={styles.wrapper}> 
     <View style={styles.container}> 
      <View style={styles.box}> 
      <Text style={styles.heading}>Heading</Text> 
      <Text>Some text</Text> 
      </View> 
     </View> 
     </View> 
    ); 
    }, 
}); 
+1

嘗試使用'response.text()' – potench

+0

對此的任何答案?我遇到了同樣的問題。那裏沒有純粹的JS XML解析器嗎? – nicholas

回答

2

你可以嘗試https://github.com/connected-lab/react-native-xml2js

const parseString = require('react-native-xml2js').parseString; 

    fetch('link') 
     .then(response => response.text()) 
     .then((response) => { 
      parseString(response, function (err, result) { 
       console.log(response) 
      }); 
     }).catch((err) => { 
      console.log('fetch', err) 
     }) 

我用它來我的項目。

1

看起來像你不能對XML的支持,但你可以得到的原始文本;使用response.text()而不是response.json()。你仍需要文字處理成XML

+0

是的,response.text()可以正常工作,但是文本到xml過程存在問題。例如[這些](http://stackoverflow.com/questions/17604071/parse-xml-using-javascript)答案的所有解決方案返回null或錯誤:( – Toon

+0

也我有「無法找到變量:DOMParser ()「;當使用新的DOMParser(); – Toon

5

可以使用NPM安裝XMLDOM,現在加載的DOMParser如下:

var DOMParser = require('xmldom').DOMParser 

我用它來我的項目。

+0

有沒有人試過專門在React Native中使用xmldom? –

+1

我在演示項目中使用了它,你可以參考演示https://github.com/kaich/ASReact/blob /master/App/Main/TypePage.js – kai

+0

它支持Android和iOS嗎? –

2

首先 - React Native使用JavaScriptCore,它只是一個javascript解釋器,所以沒有瀏覽器對象模型,沒有文檔對象,沒有窗口等。這就是爲什麼你不能使用DOMParser的原因。

確實React爲您提供了一個XMLHttpRequest包裝,但它不包括responseXML

我沒有發現這方面的任何解決方案,所以我剛剛創建了自己的圖書館爲:react-native-xml它允許您解析XML,並XPath查詢它:

let xml = require('NativeModules').RNMXml 
xml.find('<doc a="V1">V2</doc>', 
     ['/doc/@a', '/doc'], 
      results => results.map(nodes => console.log(nodes[0]))) 
// Output: 
// V1 
// V2 
+1

非常漂亮的解決方案,但它似乎不支持Android。所以你在那裏仍然會遇到同樣的問題。 –

-1

我有同樣的問題花了幾個小時才發現我可以這樣做:

const GOOGLE_FEED_API_URL = "https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=-1&q=" 
let url = GOOGLE_FEED_API_URL + encodeURIComponent(<yoururl>); 

fetch(url).then((res) => res.json()); 

希望它有幫助!

+1

這是怎麼被upvoted?它回答了一個完全不同的問題;如何將URL作爲get參數發送。 –

+0

我認爲它使用Google服務將XML文件轉換爲JSON ... –