记得之前写过一篇关于XML解析的博客(猛点查看),之前是因为发现Xpath这个类似SQL语句的字符串解析XML,觉得很惊奇,遂有了那篇文章。用XMLParser解析XML文件,是因为工作Unity发布WinPhone版本是不支持System.xml这个类库,这里的确有点想吐槽下(Microsoft在自家院里怎么没有做兼容)。所以我就google下,才找到了XMLparser这个类库(其实就三个.cs文件)。
这里介绍下XMLParser的原理,XMLParser应就三个类文件 XMLParser,XMLNode,XMLNodeList,顾名思义,XMLParser就是解析XML的实现类(基于字符匹配解析的,具体细节可以看代码,我是没心思看这个了,太绕了),XMLNode就是将解析出来的“项”存储为XMLNode,其实就是一个Hashtable,XMLNodeList就不用多说了。查询的时候就是需要查询项的“路径”字符串传入XMLNode(Hashtable)查找返回。
写到这里突然想到写这篇博客的另外一个理由:XMLParser这个类库是我找到的,但是是给项目其他同事用的,然后我那个同事一直说解析不到,妈蛋,会不会用呀,然后我就无语写了几行例子教程。
所以直接附上这几行教程:
string str = File.ReadAllText(@"config.xml", Encoding.UTF8); //读取XML文件 //MessageBox.Show(str); XMLParser xmlParser = new XMLParser(); XMLNode xn = xmlParser.Parse(str); server = xn.GetValue("items>0>server>0>_text"); database = xn.GetValue("items>0>database>0>_text"); XMLNode temp=xn.GetNode("items>0>res>0"); string basePath=temp.GetValue("@basePath");//或直接 basePath=xn.GetValue("items>0>res>0>@basePath");
当然xml文件内容为:
<?xml version="1.0" encoding="utf-8" ?> <items> <server>192.168.52.148</server> <database>world</database> <port>3306</port> <uid>wtx</uid> <password>123456</password> <res basePath="d:\Resources" language="zh_CN" /> </items>
得到的解析结果是
server=192.168.52.148 ; database=world; basePath=d:\Resources
最后附上XMLParser的三个文件凑下篇幅:
XMLParser:
/* * UnityScript Lightweight XML Parser * by Fraser McCormick (unityscripts@roguishness.com) * http://twitter.com/flimgoblin