2009-10-30 113 views
0

当我尝试遍历库节点的子节点时,它不会返回nodevalue,它应该读取'Joe Bloggs'和'#text'作为节点名称,当它应该读取'属性'。任何人都可以看到我的JavaScript或XML可能是错误的。不能遍历XML文档

<gallery_index> 
    <gallery id="0"> 
    <property id="name">Joe Bloggs</property> 
    <property id="description"><p>testtest</p></property> 
    <property id="thumbnail_path">/images/thumb.jpg</property> 
    <property id="weblink">http://www.cnn.com</property> 
    <property id="client"></property> 
    <assets/> 
    </gallery> 
</gallery_index> 

Javascript。

// code for IE 
if (window.ActiveXObject){ 
    xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); 
} 
// code for Mozilla, Firefox, Opera, etc. 
else if (document.implementation.createDocument) 
{ 
xmlDoc=document.implementation.createDocument("","",null); 
} 
else 
{ 
alert('Your browser cannot handle this script'); 
} 
xmlDoc.async=false; 
xmlDoc.load("../../../../../../../../xml/gallery_index.xml"); 

galleryIndexNode = xmlDoc.documentElement; 
galleryNode = galleryIndexNode.firstChild; 

alert(galleryNode.firstChild.nodeName); 

编辑:

OK,改变了下面的JavaScript。如果我这样做,nodeName和nodeValue将显示。

alert(galleryNode.childNodes[1].nodeName); 

。 。 。 。 。

alert(galleryNode.childNodes[3].nodeName); 

我的XML格式严重吗?它显示在FF罚款。我能做些什么来解决这个问题?

回答

1

< gallery>的第一个孩子在你的例子中是一个没有任何东西的文本节点(或换行符和一些标签,取决于解析器是否保留空白)。包含Joe Bloggs的元素是< gallery>的第二个子元素。

事实上,它的外观,galleryNode在你的脚本点的< gallery_index>,而不是<图库>元素中的第一个文本子。

+0

我不如果你可以让我更困惑。 – madphp 2009-10-30 10:23:04

+0

想想我明白你的意思了。 Sorrt。我做了改变。 – madphp 2009-10-30 10:38:40

+0

XML没有什么问题,这只是DOM的工作方式。 如果您希望使用所有子元素执行操作,但忽略所有其他类型的节点,则应循环检查每个孩子的nodeType为1(ELEMENT_NODE)。 – 2009-10-30 11:36:03