使用Javascript在IE中加载XML时未检测到根节点
我试图用Javascript解析XML文件,但在IE7上遇到了问题 如果我有此代码:使用Javascript在IE中加载XML时未检测到根节点,javascript,xml,internet-explorer,xmlhttprequest,Javascript,Xml,Internet Explorer,Xmlhttprequest,我试图用Javascript解析XML文件,但在IE7上遇到了问题 如果我有此代码: function LoadXml() { var xmlPath = document.getElementById("hsTreeviewXmlPath").value; var xmlhttp=false; /*@cc_on @*/ /*@if (@_jscript_version >= 5) // JScript gives us Conditional c
function LoadXml()
{
var xmlPath = document.getElementById("hsTreeviewXmlPath").value;
var xmlhttp=false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
// JScript gives us Conditional compilation, we can cope with old IE versions.
// and security blocked creation of the objects.
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
alert("here1");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
alert("here2");
} catch (E) {
xmlhttp = false;
}
}
@end @*/
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
try {
xmlhttp = new XMLHttpRequest();
alert("here3");
} catch (e) {
xmlhttp=false;
}
}
if (!xmlhttp && window.createRequest) {
try {
xmlhttp = window.createRequest();
alert("here4");
} catch (e) {
xmlhttp=false;
}
}
xmlhttp.open("GET",xmlPath,false);
xmlhttp.send(null);
var xmlDoc = xmlhttp.responseXML;
ParseXml(xmlDoc);
}
function ParseXml(xmlDoc)
{
var root = xmlDoc.documentElement;
alert(root);
for(i=0; i< root.childNodes.length; i++)
{
var node = root.childNodes[i];
if(node.nodeType ==1) //process element nodes (type 1)
{
if(node.childNodes.length > 1)
{
CreateChildren("hsTreeview",node);
}
else
{
AddNode("hsTreeview", node);
}
}
}
}
函数LoadXml()
{
var xmlPath=document.getElementById(“hsTreeviewXmlPath”).value;
var xmlhttp=false;
/*@抄送@*/
/*@如果(@_jscript_version>=5)
//JScript为我们提供了条件编译,我们可以处理旧的IE版本。
//并且安全性阻止了对象的创建。
试一试{
xmlhttp=新的ActiveXObject(“Msxml2.xmlhttp”);
警惕(“此处1”);
}捕获(e){
试一试{
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
警惕(“此处2”);
}捕获(E){
xmlhttp=false;
}
}
@结束@*/
如果(!xmlhttp&&typeof XMLHttpRequest!=“未定义”){
试一试{
xmlhttp=新的XMLHttpRequest();
警惕(“此处3”);
}捕获(e){
xmlhttp=false;
}
}
if(!xmlhttp&&window.createRequest){
试一试{
xmlhttp=window.createRequest();
警惕(“此处4”);
}捕获(e){
xmlhttp=false;
}
}
open(“GET”,xmlPath,false);
xmlhttp.send(空);
var xmlDoc=xmlhttp.responseXML;
ParseXml(xmlDoc);
}
函数ParseXml(xmlDoc)
{
var root=xmlDoc.documentElement;
警报(根);
对于(i=0;i1)
{
CreateChildren(“hsTreeview”,节点);
}
其他的
{
AddNode(“hsTreeview”,node);
}
}
}
}
在FF和Chrome中,这是正确的,添加了它应该添加的节点,但在IE7上,我得到了一个脚本错误和特定错误:
所需对象
这给出了与该行相关的行号:
for(i=0; i< root.childNodes.length; i++)
{
for(i=0;i
警报框告诉我,在IE中,从xmlDoc.documentElement
填充的根节点为空
我已经使用此处的警报1等确认,在IE7中,它正在使用xmlhttp=new-ActiveXObject(“Msxml2.xmlhttp”);
对象
有没有办法解决这个问题,因为它确实令人沮丧?请确保XML文件的文本/XML Mime类型正确 编辑以下内容:
还要确保XML文件是通过http服务器从与网页相同的域和端口提供的。IE将防止网页出于安全原因访问其原始域以外的URL或本地计算机上的文件。如何做到这一点?这只是一个位于Sharepoint目录上的文件。在我的测试案例中(脱离硬盘),它仍然无法工作。@Alastair是否可以在
var xmlPath
中重命名扩展名为.xml的文件,并通过http加载网页?该文件被指定为xml文件,路径以“.xml”结尾。通过http加载的确切含义是什么?@Alastair使用http URL打开网页,而不是从本地文件系统加载网页(我认为您的意思是“脱离HDD”)。还可以尝试通过http URL加载.xml文件。如果该文件被识别为xml,则应在ie中对其进行语法着色。确实,这似乎起了作用。奇怪。您有什么解释吗?现在来了解为什么不显示子元素。