一、原理:
鑒於最近要做一個前端xml的數據驗證,查找瞭一些資料,並且自我做瞭一些總結,寫瞭一個簡單的xml字符串驗證函數,其實現的過程主要是通過用xml解析器去解析xml字符串,如果解析錯誤,會報出相應的解析錯誤,使用該思想去驗證xml格式的正確性。
在IE和非IE瀏覽器解析xml是不同的,因此需要兩種方法去解析,在IE中有ActiveXObject("Microsoft.XMLDOM")對象可以用來解析,在非IE中可以使用DOMParser對象去解析。
1.1、IE中
[javascript]
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>
例如:
[html]
:<parsererror>
<span id="xml_error" style="display: block; "><h3 xmlns<h3h3="" 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><p xmlns="http://www.w3.org/1999/xhtml" style="font-family:monospace;font-size:12px">error on line 1 at column 1: Document is empty
</p></span></parsererror>
這麼一串錯誤信息。
而如果是Safari和chrome瀏覽器返回的文檔包含<parsererror>標簽,但是該元素隻會出現在解析錯誤的地方,因此通過xmlDoc.documentElement.nodeName這種方式是無法獲取是否解析錯誤,
而需要一種更通用的方式,那就是: xmlDoc.getElementsByTagName("parsererror")直接查看是否有此標簽存在,獲取錯誤的方式兩者也有不同之處。
[javascript]
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值
二、代碼才是王道,下面就是主要的代碼實現
[javascript]
/*
* 驗證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解析文檔
摘自 飛翔、夢想