Generate a JSON from a converted XML with Javascript [duplicate]

1

I was able to do a conversion from an xml to json using a solution that I found on the internet and it answered perfectly, it stores all the json in a string and shows on the screen, but I do not know how to play the contents of this string in a file.json

Here is the code for my index.html:

<!doctype html>
<html>

<head>
    <title>Gerar Json</title>
    <script type="text/javascript" src="xml2json.js"></script>
</head>

<body>
    <pre id="jsnstr"></pre>
    <script type="text/javascript">
        var jsonstr = xml2json.fromFile('arquivo.xml', 'string');
        document.getElementById('jsnstr').innerHTML = jsonstr;
    </script>
</body>

</html>

javascript code that converts xml to json:

// Converts XML to JSON
// from: http://coursesweb.net/javascript/convert-xml-json-javascript_s2
function XMLtoJSON() {
    var me = this; // stores the object instantce

    // gets the content of an xml file and returns it in 
    me.fromFile = function(xml, rstr) {
        // Cretes a instantce of XMLHttpRequest object
        var xhttp = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
        // sets and sends the request for calling "xml"
        xhttp.open("GET", xml, false);
        xhttp.send(null);

        // gets the JSON string
        var json_str = jsontoStr(setJsonObj(xhttp.responseXML));

        // sets and returns the JSON object, if "rstr" undefined (not passed), else, returns JSON string
        return (typeof(rstr) == 'undefined') ? JSON.parse(json_str) : json_str;
    }

    // returns XML DOM from string with xml content
    me.fromStr = function(xml, rstr) {
        // for non IE browsers
        if (window.DOMParser) {
            var getxml = new DOMParser();
            var xmlDoc = getxml.parseFromString(xml, "text/xml");
        } else {
            // for Internet Explorer
            var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.async = "false";
        }

        // gets the JSON string
        var json_str = jsontoStr(setJsonObj(xmlDoc));

        // sets and returns the JSON object, if "rstr" undefined (not passed), else, returns JSON string
        return (typeof(rstr) == 'undefined') ? JSON.parse(json_str) : json_str;
    }

    // receives XML DOM object, returns converted JSON object
    var setJsonObj = function(xml) {
        var js_obj = {};
        if (xml.nodeType == 1) {
            if (xml.attributes.length > 0) {
                js_obj["@attributes"] = {};
                for (var j = 0; j < xml.attributes.length; j++) {
                    var attribute = xml.attributes.item(j);
                    js_obj["@attributes"][attribute.nodeName] = attribute.value;
                }
            }
        } else if (xml.nodeType == 3) {
            js_obj = xml.nodeValue;
        }
        if (xml.hasChildNodes()) {
            for (var i = 0; i < xml.childNodes.length; i++) {
                var item = xml.childNodes.item(i);
                var nodeName = item.nodeName;
                if (typeof(js_obj[nodeName]) == "undefined") {
                    js_obj[nodeName] = setJsonObj(item);
                } else {
                    if (typeof(js_obj[nodeName].push) == "undefined") {
                        var old = js_obj[nodeName];
                        js_obj[nodeName] = [];
                        js_obj[nodeName].push(old);
                    }
                    js_obj[nodeName].push(setJsonObj(item));
                }
            }
        }
        return js_obj;
    }

    // converts JSON object to string (human readablle).
    // Removes '\t\r\n', rows with multiples '""', multiple empty rows, '  "",', and "  ",; replace empty [] with ""
    var jsontoStr = function(js_obj) {
        var rejsn = JSON.stringify(js_obj, undefined, 2).replace(/(\t|\r|\n)/g, '').replace(/"",[\n\t\r\s]+""[,]*/g, '').replace(/(\n[\t\s\r]*\n)/g, '').replace(/[\s\t]{2,}""[,]{0,1}/g, '').replace(/"[\s\t]{1,}"[,]{0,1}/g, '').replace(/\[[\t\s]*\]/g, '""');
        return (rejsn.indexOf('"parsererror": {') == -1) ? rejsn : 'Invalid XML format';
    }
};

// creates object instantce of XMLtoJSON
var xml2json = new XMLtoJSON();

XML example:

<a>
    <child id='MNU1' />
    <child id='MNU2'/>
    <child id='MNU3'/>
    <child id='MNU4'/>
    <child id='MNU5'/>
    <child id='MNU6'/>
    <child id='MNU7'/>
    <child id='MNU8'/>
</a>

I have this problem at the moment and have not found any solutions so far.

    
asked by anonymous 01.09.2017 / 20:16

2 answers

2
  

"play the contents of this string in an .json file"

You can not save because the script is running on the client, because of security issues you do not have access to automatically save files on it.

You have some options for saving data in the browser:

LocalStorage

You can store data on the client machine like this:

var data = { name: 'Bob', age: 12 };
Window.localStorage.setItem('person', data);

Then, on a different page in the same domain, you can then retrieve this data:

var data = Window.localStorage.getItem('person');

However, note that some browser security settings disable localStorage so that it does not work in all situations.

One more reading here:

Using_the_Web_Storage_API

Window.localStorage

Cookies

The other alternative is to use cookies.

document.cookie = "name=Bob";
document.cookie = "age=12";
console.log(document.cookie); // displays: name=Bob;age=12

One more reading here:

cookie

-

You can also do is generate a file and request "save as" to the user.

You can use the FileSaver.js

Example

    
01.09.2017 / 20:43
0

I found an online code that I think might help:

function xmlToJson(xml) {

    // Create the return object
    var obj = {};

    if (xml.nodeType == 1) { // element
        // do attributes
        if (xml.attributes.length > 0) {
        obj["@attributes"] = {};
            for (var j = 0; j < xml.attributes.length; j++) {
                var attribute = xml.attributes.item(j);
                obj["@attributes"][attribute.nodeName] = attribute.nodeValue;
            }
        }
    } else if (xml.nodeType == 3) { // text
        obj = xml.nodeValue;
    }

    // do children
    if (xml.hasChildNodes()) {
        for(var i = 0; i < xml.childNodes.length; i++) {
            var item = xml.childNodes.item(i);
            var nodeName = item.nodeName;
            if (typeof(obj[nodeName]) == "undefined") {
                obj[nodeName] = xmlToJson(item);
            } else {
                if (typeof(obj[nodeName].push) == "undefined") {
                    var old = obj[nodeName];
                    obj[nodeName] = [];
                    obj[nodeName].push(old);
                }
                obj[nodeName].push(xmlToJson(item));
            }
        }
    }
    return obj;
};

And then convert like this:

var jsonConverted = JSON.stringify(xmlToJson(xmlDoc));

For more information click HERE

    
01.09.2017 / 20:32