如何将childNodes用于XML文档?

时间:2015-04-09 11:13:21

标签: javascript ajax xml nodes elements

我创建了以下javascript:

<script>
    function stats(cod) {
        var th = document.getElementsByTagName("th");
        var tds = document.getElementsByClassName("pt");

        httpRequest = new XMLHttpRequest();
        httpRequest.onreadystatechange = function() {
            if (httpRequest.readyState == 4 && httpRequest.status == 200) {
                var xmlDoc = httpRequest.responseXML.documentElement;

                th[0].innerHTML = xmlDoc.getElementsByTagName('name')[0].firstChild.nodeValue;
                tds[0].innerHTML = xmlDoc.getElementsByTagName('what')[0].firstChild.nodeValue;
                tds[1].innerHTML = xmlDoc.getElementsByTagName('office')[0].firstChild.nodeValue;
                tds[2].innerHTML = xmlDoc.getElementsByTagName('www')[0].firstChild.nodeValue;
                tds[3].innerHTML = xmlDoc.getElementsByTagName('over')[0].firstChild.nodeValue;
            }
        }
        httpRequest.open("GET","getData.php?codice=" + cod, true);
        httpRequest.send(null);
    }
</script>

我确信这是一种更好的方式来读取XML内容并将其值分配给表TD。我尝试使用xmlDoc获取xmlDoc.getElementsByTagName('response').childNodes;中包含的所有元素的数组,但结果似乎未定义。

编辑:

以下是XML示例:

<response>
    <name>The name</name>
    <what>What is</what>
    <office>The office</office>
    <www>The website</www>
    <over>Yes</over>
</response>

2 个答案:

答案 0 :(得分:1)

getElementsByTagName返回一个类似数组的元素集合。

特定元素(包括集合的每个成员)可能有childNodes。该集合本身不会。

答案 1 :(得分:1)

您可以轻松访问response元素

var response = httpRequest.responseXML.documentElement;

我不会尝试使用childNodes,因为可以在元素之间包含文本节点,而使用response.children会为您提供子元素,但仅限于现代浏览器。在这种情况下,元素还具有textContent属性,您可以在所有firstChild.nodeValue次访问时使用该属性:

var childElements = response.children;

th[0].innerHTML = childElements[0].textContent;
tds[0].innerHTML = childElements[1].textContent;
...

另一方面,一旦XML中元素的顺序发生变化或省略了元素,您将读出错误的数据,因此使用例如response.getElementsByTagName('www')[0].textContent以名字命名。