javascript前端XML格式正确性验证方法



一、原理:

鉴于最近要做一个前端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解析文档


你可能感兴趣的:(JavaScript,xml,Opera,firefox,Safari,mozilla)