如何为 XML 文档使用子节点?

How to use childNodes for XML document?

我创建了以下 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 内容并将其值分配给 table TD 的更好方法。我尝试使用 xmlDoc.getElementsByTagName('response').childNodes; 获取 xmlDoc 中包含的所有元素的数组,但结果似乎未定义。

编辑:

这是 XML 的示例:

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

getElementsByTagName returns 类似数组的元素集合。

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

您可以轻松访问 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 以名字命名。