【问题标题】:Reading xml document in firefox在Firefox中读取xml文档
【发布时间】:2011-05-30 20:20:18
【问题描述】:

我正在尝试使用 javascript 读取customers.xml。

我的教授教我们使用 `ActiveXObject 读取 xml,他给我们分配了一个任务来创建一个示例登录页面,该页面通过读取 customers.xml 来检查用户名和密码。

我正在尝试使用 DOMParser 以便它可以与 firefox 一起使用。

但是当我点击登录按钮时,我得到了这个错误。

错误:语法错误源文件: file:///C:/Users/Searock/Desktop/home/project/project/login.html 行:1,列:1 源代码: 客户.xml

这是我的代码。

login.js

var xmlDoc = 0;

function checkUser()
{
    var user = document.login.txtLogin.value;
    var pass = document.login.txtPass.value;
    //xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    /*
    xmlDoc = document.implementation.createDocument("","",null);
        xmlDoc.async = "false";
    xmlDoc.onreadystatechange = redirectUser;
    xmlDoc.load("customers.xml");

    */
    var parser = new DOMParser();          
    xmlDoc = parser.parseFromString("customers.xml", "text/xml");
    alert(xmlDoc.documentElement.nodeName);

    xmlDoc.async = "false";
    xmlDoc.onreadystatechange = redirectUser;                
}

function redirectUser()
{
    alert('');
    var user = document.login.txtLogin.value;
    var pass = document.login.txtPass.value;
    var log = 0;
    if(xmlDoc.readyState == 4)
    {
        xmlObj = xmlDoc.documentElement;
        var len = xmlObj.childNodes.length;

        for(i = 0; i < len; i++)
        {
            var nodeElement = xmlObj.childNodes[i];
            var userXml = nodeElement.childNodes[0].firstChild.nodeValue;
            var passXml = nodeElement.childNodes[1].firstChild.nodeValue;
            var idXML = nodeElement.attributes[0].value

            if(userXml == user && passXml == pass)
            {
                log = 1;
                document.cookie = escape(idXML);
                document.login.submit();
            }
        }
    }

    if(log == 0)
    {
        var divErr = document.getElementById('Error');
        divErr.innerHTML = "<b>Login Failed</b>";

    }
}

customers.xml

<?xml version="1.0" encoding="UTF-8"?>

<customers>
    <customer custid="CU101">
        <user>jack</user>
        <pwd>PW101</pwd>
        <email>jack@rediff.com</email>
    </customer>
    <customer custid="CU102">
        <user>jill</user>
        <pwd>PW102</pwd>
        <email>jill@rediff.com</email>
    </customer>
    <customer custid="CU103">
        <user>john</user>
        <pwd>PW103</pwd>
        <email>john@rediff.com</email>
    </customer>
    <customer custid="CU104">
        <user>jeff</user>
        <pwd>PW104</pwd>
        <email>jeff@rediff.com</email>
    </customer>
</customers>

我在alert(xmlDoc.documentElement.nodeName); 线上收到解析器错误消息

我不知道我的代码有什么问题。有人能指出我正确的方向吗?

编辑:

好的,我找到了解决办法。

var xmlDoc = 0;
var xhttp = 0;
function checkUser()
{
    var user = document.login.txtLogin.value;
    var pass = document.login.txtPass.value;
    var err = "";
    if(user == "" || pass == "")
    {
        if(user == "")
        {
            alert("Enter user name");
        }

        if(pass == "")
        {
            alert("Enter Password");
        }

        return;
    }

    if (window.XMLHttpRequest)
    {
        xhttp=new XMLHttpRequest();
    }
    else // IE 5/6
    {
        xhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xhttp.onreadystatechange = redirectUser;        
    xhttp.open("GET","customers.xml",true);
    xhttp.send();
}

function redirectUser()
{
    var log = 2;
    var user = document.login.txtLogin.value;
    var pass = document.login.txtPass.value;
    if (xhttp.readyState == 4)
    {
        log = 0;
        xmlDoc = xhttp.responseXML;
        var xmlUsers = xmlDoc.getElementsByTagName('user');
        var xmlPasswords = xmlDoc.getElementsByTagName('pwd');
        var userLen = xmlDoc.getElementsByTagName('customer').length;
        var xmlCustomers = xmlDoc.getElementsByTagName('customer');

        for (var i = 0; i <  userLen; i++)
        {
            var xmlUser = xmlUsers[i].childNodes[0].nodeValue;
            var xmlPass = xmlPasswords[i].childNodes[0].nodeValue;
            var xmlId = xmlCustomers.item(i).attributes[0].nodeValue;

            if(xmlUser == user && xmlPass == pass)
            {
                log = 1;
                document.cookie = xmlId;
                document.login.submit();
                break;
            }
        }

    }

    if(log == 0)
    {
        alert("Login failed");
    }
}

谢谢。

【问题讨论】:

    标签: javascript xml ajax xml-parsing


    【解决方案1】:

    parseFromString 在您的情况下正在解析字符串“customer.xml”,因为第一个参数需要是包含 XML 文档的实际内容而不是其名称的字符串。

    你可以使用这样的东西来获取 xml 文件:

    if (window.XMLHttpRequest)
      {
      xhttp=new XMLHttpRequest();
      }
    else // IE 5/6
      {
      xhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xhttp.open("GET","customer.xml",false);
    xhttp.send();
    xmlDoc=xhttp.responseXML;
    

    Source

    【讨论】:

    • xmlDoc=xhttp.responseXML;工作正常。你能帮我解析文档吗,因为我上面的代码出错了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    相关资源
    最近更新 更多