【问题标题】:can't retrieve specific element from from xml file using javascript无法使用 javascript 从 xml 文件中检索特定元素
【发布时间】:2014-03-09 21:38:31
【问题描述】:

我在尝试从 xml 文件中获取特定元素时遇到问题。 请参阅下面我使用的 javascript 代码,然后是 xml 文件。 更具体地说,当我检索第一个纪念碑元素的标题元素时,它很好。问题是当我尝试检索 xml 文件的第二个纪念碑元素的标题元素时。 第二个警报什么也没显示。我做错了什么?我猜我的 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>

【问题讨论】:

    标签: javascript xml arrays parsing dom


    【解决方案1】:

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

    解决它的一种方法是更改​​数组声明:

    var title = new Array();
    

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

    在循环中,您正在读取title 节点集。您必须获得第一个(也是唯一一个)title 元素。

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

    最后,您的alert() 没有访问文本节点。所以这会起作用:

    alert(title[k].childNodes[0].nodeValue);

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

    【讨论】:

    • 非常感谢!你说的对。我的实际问题是当我尝试在 for 循环中执行此操作时。你能检查我编辑的帖子并告诉我现在有什么问题吗?我在 for 循环中有同样的问题
    • 我明白了。您在大小为 3 的数组上再推两个元素,然后读取前两个元素,这将是空的。您也不是添加标题,而是添加节点集。我会编辑答案。
    • 再次感谢。从现在开始我将使用 firebug,我是 javascript 和 xml 的新手。
    • 但我不会推送更多元素。我删除了用于向该数组添加元素的其他行,并通过在 for 循环中添加元素来替换它们
    • 检查我发布的小提琴链接。当您在 Stack Overflow 中发布 CSS、JavaScript 和 HTML 问题时,请始终添加 JSFiddle,因为这使我们更容易对其进行测试。通常可以调整问题以适应那里。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 2019-12-28
    相关资源
    最近更新 更多