Angular2: конвертировать XML в JSON

Я хотел преобразовать XML, который я получил из ответа веб-API, в JSON в Angular 2. Приложение разработано в Nativescript. Не удалось найти решение для этого.


person dreamdeveloper    schedule 16.03.2017    source источник
comment
Вы пробовали это: npmjs.com/package/nativescript-xml2js   -  person galvan    schedule 16.03.2017
comment
Дубликат stackoverflow.com/questions /36368405/.   -  person Gili Yaniv    schedule 16.03.2017
comment
Возможный дубликат Как анализировать xml в Angular 2   -  person AJT82    schedule 16.03.2017
comment
Как сообщила команда Nativescript и в ходе экспериментов ни один из вышеперечисленных модулей, похоже, не работает с нативным скриптом angular 2. Существуют ли какие-либо другие альтернативы, которые можно использовать с нативным скриптом angular 2.   -  person dreamdeveloper    schedule 21.03.2017
comment
Странно, значит, вы искали поддержку нативного скрипта-xml2js, и он сказал, что он не работает для нативного скрипта?   -  person wuno    schedule 21.03.2017
comment
nativescript-xml2js не будет работать с nativescript. Они сказали, что автор плагина не является активным участником, и это не поддерживается в нативном скрипте. Только название сбивает с толку. Nativescript еще не предоставил подходящего решения для этого.   -  person dreamdeveloper    schedule 22.03.2017


Ответы (3)


Я нашел удивительный пакет, чтобы сделать это очень просто.

xml2js

Для меня я делаю это в приложении angular 2, но на стороне узла.

npm install xml2js --save

Это буквально так же просто, как передать xml следующим образом:

var parseString = require('xml2js').parseString;
var xml = "<root>Hello xml2js!</root>"
parseString(xml, function (err, result) {
    console.dir(result);
});

В моем приложении у меня был файл xml, и я использовал его следующим образом:

var fs = require('fs');
var parseString = require('xml2js').parseString;

function requestCreditReport(callback) {
    fs.readFile('./credit-api/response.xml', 'utf8', function (err,data) {
        if (err) return callback(err);
        parseString(data, callback);
    });
}

Посмотреть этот jsfiddle

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

person wuno    schedule 16.03.2017
comment
Почему-то я не могу увидеть журнал внутри функции parseAtring. Мыльная оболочка - это мой ответ от веб-API. - person dreamdeveloper; 16.03.2017
comment
То есть вы говорите, что пытаетесь утешить результат, а он не работает? не могли бы вы использовать console.log вне функции теста. Чтобы убедиться, что мы запускаем файл. - person wuno; 16.03.2017
comment
console.dir не работает, и я не знаю, как получить от него результат. var parseString = require('xml2js').parseString; var xml = ‹root›Hello xml2js!‹/root› parseString(xml, function (err, result) { console.dir(result); }); - person dreamdeveloper; 16.03.2017
comment
попробуйте это, var parseString = require('xml2js').parseString; var xml = ‹root›Привет, xml2js!‹/root›; var jString = parseString(xml); console.log(jString); - person wuno; 16.03.2017
comment
Я получаю следующую ошибку, когда пытаюсь использовать модуль xml2js. 03-17 02:37:48.190: V/JS(7130): ошибка ::: Ошибка: com.tns.NativeScriptException: не удалось найти модуль: события относительно: app/tns_modules/ 03-17 02:37:48.190 : V/JS(7130): com.tns.Module.resolvePathHelper(Module.java:159) 03-17 02:37:48.190: V/JS(7130): com.tns.Module.resolvePath(Module.java: 60) 03-17 02:37:48.190: V/JS(7130): com.tns.Runtime.callJSMethodNative(собственный метод) - person dreamdeveloper; 17.03.2017
comment
Я не знаю точно, будет ли это работать для нативного скрипта. Но вот модуль событий. Это может быть связано с вашим приложением npmjs.com/package/events. - person wuno; 17.03.2017
comment
Подождите, посмотрите, изменится ли это npmjs.com/package/nativescript-xml2js. - person wuno; 17.03.2017
comment
Также это может вам помочь runkit.com/npm/nativescript-xml2js - person wuno; 17.03.2017
comment
используя nativescript-xml2js. Я получаю следующее исключение. «Ошибка: com.tns.NativeScriptException: не удалось найти модуль: xml2js, относительно: app/tns_modules/», который я использую ниже, getJsonfromXml () {try { let parseString = require('xml2js').parseString; let xml = ‹root›Привет, xml2js!‹/root›; parseString(xml, function(err, result) { if (err) throw err; console.dir(result); }); } catch (e){ console.log(ошибка :: +e); } } - person dreamdeveloper; 17.03.2017
comment
Как сообщила команда Nativescript и в ходе экспериментов ни один из вышеперечисленных модулей, похоже, не работает с нативным скриптом angular 2. Существуют ли какие-либо другие альтернативы, которые можно использовать с нативным скриптом angular 2. - person dreamdeveloper; 21.03.2017

Это если вы выполняете POST и получаете ответ XML с помощью Angular 2: используйте xml2js - https://www.npmjs.com/package/xml2js

  1. npm установить xml2js --save
  2. импортировать в служебный файл как:

    import * as xml2js from 'xml2js';
    
  3. Код:

    let formdata = new URLSearchParams();
    formdata.set('username','username');
    formdata.set('pw','pw'); 
    let headers = new Headers({'Content-Type': 'application/x-www-form-urlencoded' });
    
    let options = new RequestOptions({ headers: headers, method: RequestMethod.Post});
    
    postData () {
    
         this.http.post(this._yourUrl, formdata.toString(), options)
         //convert to JSON here
         .map(res => {
                xml2js.parseString( res.text(), function (err, result) {
                console.dir(result); // Prints JSON object!
             });
         })
         .subscribe(data => { 
              console.log(data);              
         });
    }
    
person Malick    schedule 03.05.2017

person    schedule
comment
Добавьте в свой код больше контекста, чтобы помочь будущим читателям лучше понять его назначение. - person Grant Miller; 23.07.2018