由于XML的易共享性等众多优点XML技术越来越多地被应用于企业数据处理等领域如应用于企业报表新闻发布会计数据处理等等
XML正快速成为从中间层传送数据到桌面的工具由于XML的数据可以通过中间层代理与多种后端(数据库)源集成目前绝大多数数据库制造商已全面支持XML技术提供了各种强大功能处理XML数据
Microsoft的NET围绕XML这一核心提供了一个强大而快速的开发工具——C#它具有前所未有的高开发效率特别是在XML编程方面
C#提供了许多相关类处理XML数据如处理stream的类 XmlReader和XmlWriter DOM的类XmlNodeXmlDocument和XmlElement等 Xpath的类XmlNavigatorXSLT的类XslTransform
显示XML文件内容
用C#编程实现显示XML文件中信息的方法是使用NET提供的标准类把XML文件内容读入一个StreamReader类对象中再用XmlDataDocument类的DataSet读XML的方法去读XML信息到DataSet中DataSet再以DataView的方式赋给一个Web Form上的DataGrid最后由DataBind显示数据具体实现代码如下
using SystemXml
//处理XML必须加的Namespace还需在References中加SystemXMLDll
using SystemIO
//读XML文件必须加的Namespace
然后在Page_Load中加入如下代码
protected void Page_Load(object sender EventArgs e){
string datafile=guestxml
//假设XML文件名为guestxml
StreamReader tyj=new StreamReader(ServerMapPath(datafile))
XmlDataDocument datadoc = new XmlDataDocument()
//创建该对象为了读取XML
datadocDataSetReadXml(tyj)
//读取guestxml文件内容
DataGridDataSource = datadocDataSetTables[]DefaultView
//设置DataGrid数据源
DataGridDataBind()
//绑定
datadoc=null
//释放资源
tyjClose()}
//释放StreamReader类这非常重要否则下次打开会显示文件已经被使用
对应于显示用的Web Form中DataGrid的功能我们需要增加下面的函数
protected void OnSelectName(object senderEventArgs e) {
Session[select_name]=(string)DataGridSelectedItemCells[]TextToString()
//把选定的 DataGrid某行中的一个单元中的值(Name)存入一个会话变量中以便下一页用
ResponseRedirect(xml_manageaspx)}
//转到有增加删除功能的管理页
Web Form加入以下代码
<aspDataGrid id=DataGrid runat=server onselectedindexchanged=OnSelectName >
<property name=Columns>
<aspbuttoncolumn Text=选择 commandname=Select />
</property>
代码中划线部分的作用是当按了选择按钮后执行OnSelectName()中的程序把选定的 DataGrid中某行中的一个单元中的值(Name)存入一个会话变量中然后转到下一页
增加XML文件内容
在Web Form中分别增加相应的四个Label(姓名来自哪里Email地址留言内容)和四个TextBox和一个用于提交的Button并为这button增加如下代码
string datafile = guestxml XmlDocument xmldocument = new XmlDocument()
xmldocumentLoad(ServerMapPath(datafile))
//把guestxml读到xmldocument中
DocumentNavigator navigator = new DocumentNavigator(xmldocument)
//最重要的类
navigatorMoveToDocumentElement()
navigatorInsert(SystemXmlTreePositionFirstChild XmlNodeTypeElement Guest) //插入节点Guest
navigatorInsert(SystemXmlTreePositionFirstChild XmlNodeTypeElement Name)
navigatorInsert(SystemXmlTreePositionFirstChild XmlNodeTypeTextName)
navigatorValue=NameText
//为该节点赋值
navigatorMoveToParent()
//返回父节点 Guest
……
//使用同类语句在元素Name下插入另一些元素如CountryEmail地址和留言等
xmldocumentSave(ServerMapPath(datafile))
//最后保存这个XML文档
navigator=null
xmldocument=null
//释放XML文档这样其他程序可以用它
上述代码使用DocumentNavigator类增加元素和内容注意使用后要释放资源
删除XML文件内容
删除选定记录对于你上面选择的节点下面代码可查找到该节点并清除选中的信息
string datafile = guestxml
XmlDocument xmldocument = new XmlDocument()
xmldocumentLoad(ServerMapPath(datafile))
//把guestxml读到xmldocument中
DocumentNavigator navigator = new DocumentNavigator(xmldocument)
navigatorMoveToDocumentElement()
navigatorSelect(/Guests/Guest[Name=+Session[select_name]+])
//参数是XPath
navigatorRemoveSelected()
//执行删除
xmldocumentSave(ServerMapPath(datafile))
//最后保存这个XML文档
navigator=null
//释放类
xmldocument=null
//释放XML文档这样其他程序可以用它
如需将XML文件中所有信息清除使用navigatorRemoveChildren()语句即可实现
结 论
综上可知C#编写XML应用程序不但快捷而且方便在编写ASPNET数据库应用程序时用XML文件替代一些小的Table能减少许多数据库存取连接也能让其他网络程序更易使用这些数据
目前XML的主要瓶颈在于文件系统的读出或写入故应使用更多内存和缓存方式如果信息量不是巨大无比且修改量也较小而浏览量巨大的话使用XML方法将是很好的选择相反如数据量巨大应考虑使用支持XML的数据库无论你使用ADO+连接其他数据库还是使用SQL serverC#中都有直接的类函数可让这些数据库中的信息直接和XML交互访问