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());

Надеюсь, что это поможет!