.net解析XML

.net出来这么多年,一直也没用过。Visual Stdio 2005出来啦,也该学学了吧,说不定明年开始公司要用呢...

想来想去先用.net做个前置机模拟程序吧。里面可能涉及到TCP的服务程序、数据报文处理和简单的交易处理。可是在.net上怎么实现都还没概念,就一项一项试试吧...

语言方面嘛,一直喜欢C++。不过C++分配释放空间显然比较麻烦,还容易错。人家Joel Spolsky在《Joel说软件》也说了嘛,软件的开发效率系统方面,垃圾回收(Java,VB...)要比面向对象技术带来的提高要大...也有一定道理,所以就用C#吧。以后在数据格式处理方面可以考虑把JPos转成J#的代码来处理ISO8583的报文。

考虑到程序的灵活性,各项配置就用XML吧!首先想到的是上课听到的DataSet可以直接处理XML,也就是说XML的数据可以直接装到DataSet中,这样不是用起来很方便嘛...查了查手册,两句话就搞定啦!

            DataSet xmlDataSet = new DataSet();
            xmlDataSet.ReadXml(txtXMLFile.Text);

写完代码,没有XML啊,在.net的Solution Explorer里面Add一个XML文件,开始编辑。惊喜发现也有一定的Auto Complete功能啦!.net也终于改进了对*ML文件的支持啦,有点像eclipse的WTP版了。很快写好下面一个XML文件:

<?xml version="1.0" encoding="utf-8" ?>
<root>
  <Class>TestDoc</Class>
  <Node1>DataNode1</Node1>
  <Node2>DataNode2
    <Node2_1>DataNode2.1</Node2_1>
    <Node2_2>DataNode2.2</Node2_2>
  </Node2>
  <Node3>DataNode3</Node3>
  <Data Name="d1">Data1</Data>
  <Data Name="d2">Data2</Data>
  <Data Name="d3">Data3</Data>
</root>

.net是方便啊!再把DataSet扔到DataGridView.DataSource里,数据就显示出来了!

嗯?怎么搞的,DataGridView一片灰色,啥都没有??!!

跟踪进代码一看才发现,原来DataSet的数据是在类型是DataTable的Tables里面,而xml文件会解析出多个DataTable。界面上加一个ListBox,把Tables的名字放进去,选哪个表就显示哪个吧。

一阵折腾,终于把xml文件显示出来了。不过结果都不太满意,文件被解析成了3个table,分别是root、Node2、Data。其中root只有一行,有Class、Node1、Node3三个字段。Node2也是一行,Node2_1、Node2_2两个字段。Data有3行,Name和Data_Text两个字段。

仔细想想要把层次性数据库转成关系型数据库大概也只能这样啦...也不能太为难人家Bill Gates嘛。如果真要用党关系数据库还是应该把数据按照关系组织好,机器转换的能力总是有限的,不能期望太高。

不过不知道用Schema会不会能解决这个问题,改天再试试。

完成了DataSet之后,又试了试XmlDocument访问,也就是DOM。因为以前在VC6和Java里都用过DOM,比较顺利。唯一觉得不爽的就是在把XmlDocument写到TreeView的时候要自己遍历整个Node树...没有更简单的办法吗?没试出来...。另外TreeView在更新的时候要先call StartUpdate(),更新结束要call EndUpdate(),汗,Windows编程不熟啊...

不过总体来说XML的解析就这样啦。反正我要处理的文档也不算大,SAX就略过啦。下一步要找时间试试TCP的服务程序啦...

展开阅读全文

没有更多推荐了,返回首页