首页 > 代码库 > as3判断XML是否合法

as3判断XML是否合法

XML是否合法

在我认为 XML的标签成对 并且根标签外边没有其他东西

以下是合法的

<?xml version="1.0" encoding="utf-8"?><root><a/>cc</root>

 

<root><a/>cc</root>


以下是我认为不合法的

ASDASDASDASD
ASDASD<root><a/>cc</root>
asdasd<root>

我现在有个需求就是需要加载的XML文件有合法的可以直接使用的,有的是经过压缩的无法直接使用的

压缩后的内容

x陧}[?筿輠€鼑?鲏?^蓮A?8?[F藨

我需要判断这个XML是否合法

但是

str = "x陧}[?筿輠€鼑?鲏?^蓮A?8?[F藨";

var xml:XML = new XML(str);

trace(xml)//竟然不是null

我是这么解决的

我认为如果new XML不报错 并且第一个字符是"<" 而且 最后一个字符是">" 我就认为这个XML合法 如果解压缩后还不满足就直接当text使用

var tmpByte:ByteArray = event.currentTarget.data;var tmpText:String = "";var tmpXml:XML;try{    tmpXml = new XML(tmpByte.readUTFBytes(tmpByte.length));        tmpText = tmpXml.toString();        if(!(tmpText.substr(0,1) == "<" && tmpText.substr(tmpText.length - 1, 1) == ">"))    {        tmpXml = null;    }    else    {        tmpText = tmpXml.toString();    }} catch (error:Object) { tmpXml = null; }if (tmpXml == null){    try    {        tmpByte.uncompress(CompressionAlgorithm.ZLIB);                tmpXml = new XML(tmpByte.readUTFBytes(tmpByte.length));                tmpText = tmpXml.toString();                if(!(tmpText.substr(0,1) == "<" && tmpText.substr(tmpText.length - 1, 1) == ">"))        {            tmpXml = null;        }        else        {            tmpText = tmpXml.toString();        }    }    catch (error:Object) { tmpXml = null; }        if (tmpXml == null)    {        tmpText = tmpByte.readUTFBytes(tmpByte.length);    }}
if (tmpXml == null)
{
trace("此字符不是XML");
}
else
{
trace("此数据是XML")
}