ошибка при прохождении XML в JavaScript - PullRequest
0 голосов
/ 21 сентября 2010

Я использую приведенный ниже код для обхода XML в JavaScript, я могу получить значение, используя x [i] .childNodes [0] .text;функция в IE, но не в Firefox.пожалуйста, скажите мне, что я должен использовать, чтобы он работал со всеми.

  function loadXMLDoc(dname) {
    if (window.XMLHttpRequest) {
        xhttp = new XMLHttpRequest();
    }
    else {
        xhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xhttp.open("GET", dname, false);
    xhttp.send();
    return xhttp.responseXML;
}
function loadxml() {
    var xmlDoc = loadXMLDoc("xmldata/wfc20100915.xml");


    // documentElement always represents the root node
    x = xmlDoc.documentElement.childNodes;
    var arr = new Array();
    var str = "";
    for (i = 0; i < x.length; i++) {
        if (x[i].childNodes.length > 3) {
            arr[i] = new Array(5);
            arr[i][0] = x[i].childNodes[0].text;
            arr[i][1] = x[i].childNodes[1].text;
            arr[i][2] = x[i].childNodes[2].text;
            arr[i][3] = x[i].childNodes[3].text;
            arr[i][4] = x[i].childNodes[4].text;

1 Ответ

1 голос
/ 22 сентября 2010

Современные браузеры (Opera, Chrome, Firefox, Safari) и Internet Explorer по-разному интерпретируют дочерние узлы. В коде:

<div id="first">
    <div>bla</div>
</div>

(http://jsfiddle.net/2Ra3B/)

Internet Explorer увидит только 1 дочерний узел «первого». Современные браузеры увидят 3 дочерних узла: 1 элементный узел (div) и 2 текстовых узла до и после элементного узла (пробелы). Отметьте nodeType == 3, если вы хотите использовать только текстовые узлы.

Более того, может быть, вы должны использовать data или nodeValue вместо text (я не знаю, работает ли text, в «классическом» DOM браузера это не работает, но я не проверьте это с помощью responseXML).

Вам также следует рассмотреть возможность использования JSON, если вы хотите использовать передаваемые данные только в JavaScript.

PS. Вы допустили ошибку в коде: проверка, если childNodes.length > 3 вместо > 4 или лучше выглядит >= 5.

...