8

I wanted to convert the XML I received from Web API response to JSON in Angular 2. The application is developed in Nativescript. Not able to find a solution for this.

6
  • Did you tried this one: npmjs.com/package/nativescript-xml2js Commented Mar 16, 2017 at 15:30
  • Duplicate of stackoverflow.com/questions/36368405/…. Commented Mar 16, 2017 at 15:52
  • Possible duplicate of How to parse xml in Angular 2 Commented Mar 16, 2017 at 19:34
  • As informed by Nativescript team and as experimented, none of the above said modules seems to be working with nativescript angular 2. So is there any other alternatives which can be used with nativescript angular 2. Commented Mar 21, 2017 at 11:30
  • Weird, so you looked up support for the nativescript-xml2js and it said it it does not work for nativescript? Commented Mar 21, 2017 at 17:34

3 Answers 3

7

I found an amazing package to make this very simple.

xml2js

For me on I am doing it in an angular 2 application but on the node side.

npm install xml2js --save

It is literally as simple as passing the xml like this,

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

In my app I had an xml file and used it like this,

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

See this jsfiddle

I hope this helps.

Sign up to request clarification or add additional context in comments.

10 Comments

Somehow i am not able see the log inside the parseAtring function. Soap envelop is my response from web api.
So you are saying that you are trying to console result and it is not working? would you please console.log outside of the function a test. To make sure we are running the file.
The console.dir is not working and i am not sure how to get the result out of it. var parseString = require('xml2js').parseString; var xml = "<root>Hello xml2js!</root>" parseString(xml, function (err, result) { console.dir(result); });
try this, var parseString = require('xml2js').parseString; var xml = "<root>Hello xml2js!</root>"; var jString = parseString(xml); console.log(jString);
I am getting the below error when i try to use the xml2js module. 03-17 02:37:48.190: V/JS(7130): error ::: Error: com.tns.NativeScriptException: Failed to find module: "events", relative to: 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(Native Method)
|
6

This is if you are doing a POST and getting back XML response using Angular 2: Use xml2js - https://www.npmjs.com/package/xml2js

  1. npm install xml2js --save
  2. import in service file as:

    import * as xml2js from 'xml2js';
    
  3. Code:

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

Comments

0
function parseXml(xmlStr) {
    var result;
    var parser = require('xml2js');
    parser.Parser().parseString(xmlStr, (e, r) => {result = r});
    return result;
}

1 Comment

Add some more context to your code to help future readers better understand its purpose.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.