React-Native 获取 XML 数据
React-Native fetch XML data
我是 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>
);
},
});
看起来您无法取回 XML 但您可以获得原始文本;使用 response.text()
而不是 response.json()
。您仍然需要将文本处理成 xml
您可以使用 npm install xmldom,现在加载 DOMParser 如下:
var DOMParser = require('xmldom').DOMParser
我将它用于我的项目。
首先 - React Native 使用 JavaScriptCore
,它只是一个 javascript 解释器,所以没有浏览器对象模型,没有文档对象,没有 window,等等。那是例如,您不能使用 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
我遇到了同样的问题,花了几个小时才发现我可以这样做:
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());
希望对您有所帮助!
我用的是react-native,不太喜欢xmldom。
我写了自己的 react-native XML 解析器。
你可以检查它
https://www.npmjs.com/package/react-xml-parser
你可以试试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)
})
我将它用于我的项目。
我使用了 2 个包的组合。在我的用例中,我必须解析 SOAP 请求的响应:
第一个包是 - React Native XML2JS The reason for using it and not XML2JS is I was getting an error of React Native not supporting node standard library。 (我也在使用 expo。)
我实际解析的第二个包是- XML-JS。我不得不使用第一个包,因为我遇到了 React Native 不支持节点标准库的相同错误。我使用它是因为它在 XML 响应较大的情况下给出了更结构化的结果。
这是一个使用 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 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)
})
我是 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>
);
},
});
看起来您无法取回 XML 但您可以获得原始文本;使用 response.text()
而不是 response.json()
。您仍然需要将文本处理成 xml
您可以使用 npm install xmldom,现在加载 DOMParser 如下:
var DOMParser = require('xmldom').DOMParser
我将它用于我的项目。
首先 - React Native 使用 JavaScriptCore
,它只是一个 javascript 解释器,所以没有浏览器对象模型,没有文档对象,没有 window,等等。那是例如,您不能使用 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
我遇到了同样的问题,花了几个小时才发现我可以这样做:
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());
希望对您有所帮助!
我用的是react-native,不太喜欢xmldom。 我写了自己的 react-native XML 解析器。 你可以检查它 https://www.npmjs.com/package/react-xml-parser
你可以试试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)
})
我将它用于我的项目。
我使用了 2 个包的组合。在我的用例中,我必须解析 SOAP 请求的响应:
第一个包是 - React Native XML2JS The reason for using it and not XML2JS is I was getting an error of React Native not supporting node standard library。 (我也在使用 expo。)
我实际解析的第二个包是- XML-JS。我不得不使用第一个包,因为我遇到了 React Native 不支持节点标准库的相同错误。我使用它是因为它在 XML 响应较大的情况下给出了更结构化的结果。
这是一个使用 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 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)
})