如何在javascript中的xml中获取子进程的子进程

时间:2014-01-05 20:47:49

标签: javascript xml

我有一个看起来像这样的xml

     <?xml version="1.0" encoding="utf-8"?>
<crossword1>
    <clues>
        <clue>
         Man's best friend
        </clue>
        <answer>
         dog
        </answer>
        <clue>
         Likes to chase mice
        </clue>
        <answer>
         cat
        </answer>
        <clue>
         Flying mammal
        </clue>
        <answer>
         bat
        </answer>
        <clue>
         Has a trump
        </clue>
        <answer>
         elephant
        </answer>
        <clue>
         Large marsupial
        </clue>
        <answer>
         kangaroo
        </answer>
    </clues>
    <puzzle>
        <acrossClues>
            <clue>Large marsupial</clue>
            <answer>kangaroo</answer>
            <x>0</x>
            <y>5</y>
            <clue>Likes to chase mice</clue>
            <answer>cat</answer>
            <x>2</x>
            <y>7</y>
        </acrossClues>
        <downClues>
            <clue>Has a trump</clue>
            <answer>elephant</answer>
            <x>4</x>
            <y>0</y>
            <clue>Flying mammal</clue>
            <answer>bat</answer>
            <x>1</x>
            <y>4</y>
            <clue>Man's best friend</clue>
            <answer>dog</answer>
            <x>7</x>
            <y>4</y>
        </downClues>

    </puzzle>
    <width>80</width>
    <height>80</height>
    <preview>0</preview>

</crossword1>

我想只获得acrossClues标签的线索(所以,穿过线索的线索儿童)。 到现在为止,我有这个:

var clues=new Array();
    var xml=loadXMLDoc("data/rebus1.xml");
    var x=xml.getElementsByTagName("acrossClues")[0].childNodes;

    for (i=0;i<x.length;i++)
    {
        clues.push(x[i].childNodes.item(0));

    }
    alert(clues[0]);

问题是警报(线索[0])给我零.... 这是为什么? 谢谢。

2 个答案:

答案 0 :(得分:1)

尝试使用children而不是childNodes,因为chidlNodes也将包含文本节点,如果您的xml已格式化,那么实际元素节点之间的所有连续空白区域都将变为textnode本身{{1在集合中也会有空文本节点。因此,使用children将忽略文本节点。

尝试:

xml.getElementsByTagName("acrossClues")[0].childNodes

<强> Demo

答案 1 :(得分:0)

这是有效的

for (i=0;i<x.length;i++)
{
    if(x[i].childNodes.item(0) != null){
        clues.push(x[i].childNodes.item(0).nodeValue);
    }

}