我是 React-Native 的新手。尝试制作一些非常简单的应用程序。无法弄清楚如何获取 XML 数据。使用 JSON,一切都变得清晰简单。
但是如何获取 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>
);
},
});
你可以尝试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)
})
我将它用于我的项目。
你可以使用 npm install xmldom,现在加载 DOMParser 如下:
var DOMParser = require('xmldom').DOMParser
我将它用于我的项目。
首先 - 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
看起来你无法取回 XML,但你可以获取原始文本;使用
response.text()
代替 response.json()
。您仍然需要将文本处理为 xml
我正在使用react-native,而且我不太喜欢xmldom。 我编写了自己的 React-native XML 解析器。 你可以检查一下 https://www.npmjs.com/package/react-xml-parser
我使用了2个套餐的组合。在我的用例中,我必须解析 SOAP 请求的响应:
第一个包是 - React Native XML2JS 使用它而不是 XML2JS 的原因是我收到了 React Native 不支持节点标准库 的错误。 (我也在使用expo。)
我实际用于解析的第二个包是 - XML-JS。我必须使用第一个包,因为我遇到了 React Native 不支持节点标准库的相同错误。我使用它是因为它在 XML 响应较大的情况下提供了更结构化的结果。
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)
})
这是一个使用 xml2js 的工作示例:
• responseText 是从 example.xml 获取的 .XML 数据
• 在 .then((responseText) = {}) 的大括号内添加 xml2json 脚本,用于将 .xml 数据解析为 Json 格式 console.log(result) 将在终端中呈现 json 格式。
旁注:如果删除解析字符串并添加 console.log(responseText),则输出将为 XML 格式。
import React, {Component} from 'react';
import {View} from 'react-native';
import {parseString} from 'xml2js'
class App extends Component {
componentDidMount(){
this._isMounted = true;
var url = "https://example.xml"
fetch(url)
.then((response) => response.text())
.then((responseText) => {
parseString(responseText, function (err, result) {
console.log(result);
return result;
});
this.setState({
datasource : result
})
})
.catch((error) => {
console.log('Error fetching the feed: ', error);
});
}
componentWillUnMount() {
this._isMounted = false;
}
render(){
return(
<View>
</View>
)
}
}
export default App;
我遇到了同样的问题,花了几个小时才发现我可以这样做:
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());
希望有帮助!