无法使用javascript从xml文件中检索特定元素

时间:2014-03-09 21:38:32

标签: javascript xml arrays parsing dom

我在尝试从xml文件中获取特定元素时遇到问题。 请参阅下面我使用的javascript代码,然后是xml文件。 更具体地说,当我检索第一个纪念碑元素的标题元素时,它的罚款。问题是当我尝试检索xml文件的第二个纪念碑元素的title元素时。 第二个警报什么都没有。我做错了什么?我的for循环里面有一些错误我猜。

javascript文件

<script>
    function loadXMLDoc(doc) { 
        if (window.XMLHttpRequest){ 
            request = new XMLHttpRequest(); 
        } else { 
            request = new ActiveXObject("Microsoft.XMLHTTP"); 
        } 
        request.open("GET",doc,false); 
        request.send(""); 
        return request.responseXML; 
    }

    function displaypafosmonuments(doc) {
        xmlDoc = loadXMLDoc(doc);
        pafos=xmlDoc.getElementsByTagName("pafos");
        monuments=pafos[0].getElementsByTagName("monuments");

        monument=monuments[0].getElementsByTagName("monument");

        var title = new Array(3);
for(var k=0;k<2;k++){
title.push(monument[k].getElementsByTagName("title"));
alert(title[k].nodeName);
                   }
    }
</script>

xml文件

<?xml version="1.0" encoding="UTF-8"?>
<data>    
    <pafos>
        <monuments>
            <monument>
                <username>dimitris</username>
                <email>katitis@gmail.com</email>
                <title>Colossi Castle</title>
                <description>Very nice castle</description>
                <image>colossi.jpg</image>
                <geolocation></geolocation>
                <date>08/03/2014</date>
                <time>01:33</time>
            </monument>
            <monument>
                <username>aristi</username>
                <email>kati@gmail.com</email>
                <title>Castle</title>
                <description>Very ugly castle</description>
                <image>colossi.jpg</image>
                <geolocation></geolocation>
                <date>09/03/2014</date>
                <time>02:33</time>
            </monument>
        </monuments>
    </pafos>
</data>

1 个答案:

答案 0 :(得分:1)

您正在创建一个包含三个空位的数组,然后在循环内推送另外两个项目。现在你的数组有五个元素。但是你读第一个和第二个,它们都是空的。

修复它的一种方法是更改​​数组声明:

var title = new Array();

现在你将推送元素0和1,并读取元素0和1。

在循环内部,您正在读取title节点集。你必须得到第一个(也是唯一的)标题元素。

title.push(monument[k].getElementsByTagName("title")[0]);

最后,您的alert()未访问文本节点。所以这将有效:

警报(标题[K] .childNodes [0] .nodeValue);

更新了小提琴:http://jsfiddle.net/helderdarocha/4sZ8x/1/