2009-09-23 96 views
2
//create an instance of the XML parser 
if (window.ActiveXObject) 
{ 
    //Checking if the browser is IE 
    xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
    xmlDoc.async="false"; //make sure doc is fully loaded 
    xmlDoc.load(strPath) //load the file in the parser 
    if (xmlDoc.parseError.errorCode != 0) 
    { 
     alert("Error #: " + xmlDoc.parseError.errorCode;   
    }   
} 

//for mozilla based browsers 
else if (document.implementation && document.implementation.createDocument)  
{ 
    xmlDoc= document.implementation.createDocument("","doc",null); 
    xmlDoc.async=false; //make sure doc is fully loaded 
    loaded = xmlDoc.load(strPath); 
    if(!loaded) 
    { 
     alert("Error in XML File"); 
    }    
} 

//Parse the XML 
var root = xmlDoc.documentElement; 
level1Nodes = root.children; 
for(var index1 = 0; index1 < level1Nodes.length; index1++) 
{ 
    //Extract the markup content from XML 
    var level1Node = level1Nodes[index1]; 
    var strName = level1Node.children[0].textContent; 
    var strHeader1 = level1Node.children[1].tagName; 
    var strHeader1Content = level1Node.children[1].textContent; 
} 

任何想法? IE DOM解析器中是否提供了“children”属性?为什么这个Javascript DOM代码只能在FF中工作,而不是IE?

在此先感谢您的帮助!

回答

7

在IE中,XML文档没有实现与HTML文档相同的文档对象模型;特别是XML Node对象不具有children属性,这是非标准属性。

您应该改用childNodes集合。但是请注意,在Firefox和其他浏览器 - 和IIRC中,在IE的特定情况下 - 此集合还将包含仅包含空白的文本节点,例如原始XML文件中的换行符。因此,您需要检查nodeType属性:如果它的值为1,它是一个元素,并且将具有诸如tagName之类的属性。

此外,由于MSXML实现DOM Level 1,而火狐实现DOM Level 3,你将无法使用textContent属性,这是在3级。取而代之的介绍,你将不得不遍历的nodeTypechildNodes === 3并连接它们的nodeValue属性,然后可能想要修剪任何前导或尾随空格。或者,如果您知道那里只有textNodes,请首先调用元素的normalize方法以确保它只有一个文本节点子项。

从来没有人说这东西应该是很容易:-(

+0

哇,感谢打破它下来吗! – BeachRunnerFred 2009-09-23 17:43:49

1

children是IE6中的一个对象。也许有一个不一致的地方在于IE的第一个孩子是一个文本节点,而在其他浏览器中,第一个孩子是一个DOM元素节点?通常你会使用.childNodes.childNodes.length并在循环中检查.nodeType==1以运行孩子。

+0

谢谢!我给一个尝试。 – BeachRunnerFred 2009-09-23 07:02:31

相关问题