React-Native выборка данных XML
Я новичок в React-Native. Попытка сделать некоторые очень простые приложения. Невозможно выяснить, как получить XML-данные. С JSON все понятно и просто.
Но как получить XML? Попробовал преобразовать его в 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
Вы можете попробовать 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
вы можете использовать npm install xmldom, теперь загрузите DOMParser, как показано ниже:
var DOMParser = require('xmldom').DOMParser
Я использую его для своего проекта.
Ответ 3
Прежде всего - 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
Ответ 4
похоже, что вы не можете вернуть XML, но вы можете получить исходный текст; используйте response.text()
вместо response.json()
. вам все равно нужно обработать текст в xml
Ответ 5
Я использую response-native, и мне не очень понравился xmldom.
Я написал собственный собственный синтаксический анализатор XML.
Вы можете проверить это на
https://www.npmjs.com/package/react-xml-parser
Ответ 6
Я использовал комбинацию из 2 пакетов. В моем случае использования я должен был проанализировать ответ SOAP-запроса:
Первый пакет - React Native XML2JS Причиной его использования, а не XML2JS, является то, что я получаю сообщение об ошибке React Native, не поддерживающей стандартную библиотеку узлов. (Я также использую выставку.)
Второй пакет, который я фактически использовал для синтаксического анализа, - XML-JS. Мне пришлось использовать первый пакет, поскольку я получал ту же ошибку, что React Native не поддерживает стандартную библиотеку узлов. Я использовал это, потому что это дало более структурированный результат в случае большого XML-ответа.
Ответ 7
У меня была одна и та же проблема, потратив несколько часов, прежде чем я узнал, что могу сделать это вот так:
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());
Надеюсь, что это поможет!