javascript前端XML格式正確性驗證方法

來源:互聯網
上載者:User
一、原理:

鑒於最近要做一個前端xml的資料驗證,尋找了一些資料,並且自我做了一些總結,寫了一個簡單的xml字串驗證函式,其實現的過程主要是通過用xml解析器去解析xml字串,如果解析錯誤,會報出相應的解析錯誤,使用該思想去驗證xml格式的正確性。

在IE和非IE瀏覽器解析xml是不同的,因此需要兩種方法去解析,在IE中有ActiveXObject("Microsoft.XMLDOM")對象可以用來解析,在非IE中可以使用DOMParser對象去解析。
1.1、IE中

  xmlDoc  = new ActiveXObject("Microsoft.XMLDOM");        xmlDoc.async="false";        xmlDoc.loadXML(xmlContent);        if(xmlDoc.parseError.errorCode!=0)        {            errorMessage="錯誤code: " + xmlDoc.parseError.errorCode + "\n";            errorMessage=errorMessage+"錯誤原因: " + xmlDoc.parseError.reason;            errorMessage=errorMessage+"錯誤位置: " + xmlDoc.parseError.line;            errorCode = 1;        }        else        {            errorMessage = "格式正確";        }

相信這段代碼沒有什麼不好理解的,大部分都是xml對象的一些屬性,擷取錯誤資訊。1.2、非IE( Mozilla, Firefox, Opera,chrome, safari)這部分需要分為兩個部分,主要的原因是Mozilla, Firefox, Opera如果解析錯誤,parseFromString返回一個document對象,但這個對象的文件項目是<parsererror>
例如:

:<parsererror><span id="xml_error" style="display: block; "><h3 xmlns<h3="" xmlns=""http://www.w3.org/1999/xhtml"">This page contains the following errors:</h3><h3 xmlns="http://www.w3.org/1999/xhtml">This page contains the following errors:</h3>="http://www.w3.org/1999/xhtml">This page contains the following errors:<h3 xmlns="http://www.w3.org/1999/xhtml">Below is a rendering of the page up to the first error.</h3><div xmlns="http://www.w3.org/1999/xhtml" style="font-family:monospace;font-size:12px">error on line 1 at column 1: Document is empty</div></span></parsererror>

這麼一串錯誤資訊。
而如果是Safari和chrome瀏覽器返回的文檔包含<parsererror>標籤,但是該元素只會出現在解析錯誤的地方,因此通過xmlDoc.documentElement.nodeName這種方式是無法擷取是否解析錯誤,
而需要一種更通用的方式,那就是: xmlDoc.getElementsByTagName("parsererror")直接查看是否有此標籤存在,擷取錯誤的方式兩者也有不同之處。

 if(xmlDoc.documentElement.nodeName=="parsererror"){                errorCode = 1;                errorMessage = xmlDoc.documentElement.childNodes[0].nodeValue;            } else {                errorCode = 1;                errorMessage = xmlDoc.getElementsByTagName("parsererror")[0].innerHTML;            }

if語句判斷是否是Mozilla, Firefox, Opera瀏覽器,如果是的話,可以直接擷取錯誤資訊,而Safari和chrome瀏覽器則需要擷取標籤的innerHtml值
二、代碼才是王道,下面就是主要的代碼實現

/* * 驗證xml格式的正確性 */function validateXML(xmlContent){    //errorCode 0是xml正確,1是xml錯誤,2是無法驗證    var xmlDoc,errorMessage,errorCode = 0;    // code for IE    if (window.ActiveXObject)    {        xmlDoc  = new ActiveXObject("Microsoft.XMLDOM");        xmlDoc.async="false";        xmlDoc.loadXML(xmlContent);        if(xmlDoc.parseError.errorCode!=0)        {            errorMessage="錯誤code: " + xmlDoc.parseError.errorCode + "\n";            errorMessage=errorMessage+"錯誤原因: " + xmlDoc.parseError.reason;            errorMessage=errorMessage+"錯誤位置: " + xmlDoc.parseError.line;            errorCode = 1;        }        else        {            errorMessage = "格式正確";        }    }    // code for Mozilla, Firefox, Opera, chrome, safari,etc.    else if (document.implementation.createDocument)    {        var parser=new DOMParser();        xmlDoc = parser.parseFromString(xmlContent,"text/xml");        var error = xmlDoc.getElementsByTagName("parsererror");        if (error.length > 0)        {               if(xmlDoc.documentElement.nodeName=="parsererror"){                errorCode = 1;                errorMessage = xmlDoc.documentElement.childNodes[0].nodeValue;            } else {                errorCode = 1;                errorMessage = xmlDoc.getElementsByTagName("parsererror")[0].innerHTML;            }        }        else        {            errorMessage = "格式正確";        }    }    else    {        errorCode = 2;        errorMessage = "瀏覽器不支援驗證,無法驗證xml正確性";    }    return {        "msg":errorMessage,         "error_code":errorCode    };}//代碼有參考他人xml解析文檔
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.