admin管理员组

文章数量:1355642

I'm trying to get a part of an xml file into a javascript array. I've tried verry much tutorials, but I just can't get it working. Here's the part of the xml file i want to use:

    <answers>
      <answer id="0">hello</answer>
      <answer id="1">goodbye</answer>
    </answers>

I want to use the answers in a javascript array like:

var FAnswers = new Array("hello","goodbye");

Is there anybody, who knows a simple little javascript that does the job?

I'm trying to get a part of an xml file into a javascript array. I've tried verry much tutorials, but I just can't get it working. Here's the part of the xml file i want to use:

    <answers>
      <answer id="0">hello</answer>
      <answer id="1">goodbye</answer>
    </answers>

I want to use the answers in a javascript array like:

var FAnswers = new Array("hello","goodbye");

Is there anybody, who knows a simple little javascript that does the job?

Share Improve this question asked Jan 22, 2012 at 13:53 Jan ThiemenJan Thiemen 1031 gold badge3 silver badges11 bronze badges 2
  • you just created an array FAnswers with 2 elements. It seems like you've answered your own question. – Jason Commented Jan 22, 2012 at 13:54
  • 1 @Jason I believe the question is about how to parse the XML into the array that. – Rick Kuipers Commented Jan 22, 2012 at 13:59
Add a ment  | 

4 Answers 4

Reset to default 4

The following function should do the trick:

function get_answers_from_xml_string(xml_string) {
    // Parse the XML string into a XMLDocument
    var doc = window.DOMParser
                ? new DOMParser().parseFromString(xml_string, 'text/xml')    // Standard
                : new ActiveXObject('Microsoft.XMLDOM').loadXML(xml_string); // IE

    // Find the answer nodes
    var answers_nodes = doc.getElementsByTagName('answer');
    var answers = [];

    // Loop through them and save their text content into an array
    for (var i = 0; i < answers_nodes.length; i++) {
        answers.push(answers_nodes[i].firstChild.data)
    }

    return answers;
}

Just pass it a string containing the XML with answers and it will return an array:

var xml_string = '<answers><answer id="0">hello</answer><answer id="1">goodbye</answer></answers>';
var answers = get_answers_from_xml_string(xml_string);
// answers == ["hello", "goodbye"]

So you need to parse XML in javascript. Take a look at this example I've just made:

// Some XML, say loaded with AJAX, etc.
var str = '<response><answers><answer id="0">hello</answer><answer id="1">goodbye</answer></answers><data id="2341-63">Test data</data></response>';

var parser, xml;
if (window.DOMParser) {
    parser = new DOMParser();
    xml = parser.parseFromString(str, 'text/xml');
}
else { // IE
    xml = new ActiveXObject('Microsoft.XMLDOM');
    xml.async = false;
    xml.loadXML(str);
}

var nodes = xml.getElementsByTagName('answer');

var i, l = nodes.length, answers = [];
for (i = 0; i < l; i++) {
    answers.push(nodes[i].childNodes[0].nodeValue);
}

console.log(answers) // ["hello", "goodbye"]

According to the answer to this question you need to do something like that (assuming you load your XML via XHR):

// get XML 
var xml = xhr.responseXML;
var target = new Array();

// get answers
var answers= xml.getElementsByTagName("answer");
for (var i = 0; i < answers.length; i++) {   
    target.push(answers[i].nodeValue);
}  
How about this way: The simplest - 

 var xml = "<answers><answer id='0'>hello</answer><answer id='1'>goodbye</answer></answers>";
    document.write (xml);
    var doc = document.getElementsByTagName('answer');
    var arrayAnswers = [];
    for(var i=0, len = doc.length; i < len; i++)
    {
       arrayAnswers.push(doc[i]);
    }
    alert(arrayAnswers[0].innerHTML);
    alert(arrayAnswers[1].innerHTML);

本文标签: part of xml file to javascript arrayStack Overflow