2015-04-22 482 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 ... –