编写此案例的目的是为了描述在普通的应用程序中如何运用DOM技术以及对上一篇文章《C#中使用XML——实现DOM》中所讲述的DOM的相关知识回顾一下本案例将分析一个联系人应用程序在这里将XML文档充当数据库来使用 所有的联系人信息存储在XML文档中同时在程序中使用DOM对联系人文档进行查询编辑更新等操作具体来说本案例将实现以下功能
.添加一个新的联系人
.修改现有联系人
.删除现有联系人
.按姓氏查询联系人
.按名字查询联系人
.将所有联系人导出到另一个XML文件
.将联系人从另一个XML文件导入
以下是程序运行效果图
应用程序主窗体
添加联系人窗体
修改联系人窗体
以下是用于测试程序的XML文件
contactxml 将该文件保存在项目目录下
<?xml version= encoding=gb?>
<ContactDetails>
<Contact>
<name>
<first>Steven</first>
<last>Perez</last>
</name>
<note>cn;system at ;/note>
</Contact>
<Contact>
<name>
<first>Billoys</first>
<last>Perez</last>
</name>
<note>;system at </note>
</Contact>
<Contact>
<name>
<first>刘</first>
<last>罗锅</last>
</name>
<note>古代人</note>
</Contact>
</ContactDetails>
contactxml 该文件用于实现导入联系人功能将该文件随便保存在一个目录下然后将保存路径连同文件名拷贝到主窗体的保存的路径文本框中再单击导入按纽即可实现导入功能
<?xml version= encoding=gb?>
<ContactDetails>
<Contact>
<name>
<first>Steven</first>
<last>Perez</last>
</name>
<note>cn;system at ;/note>
</Contact>
<Contact>
<name>
<first>Billoys</first>
<last>Perez</last>
</name>
<note>;system at </note>
</Contact>
<Contact>
<name>
<first>刘</first>
<last>德华</last>
</name>
<note>香港着名艺人工作勤恳同时不忘生活出演电影多部演技已达登峰造极刻画人物栩栩如生</note>
</Contact>
<Contact>
<name>
<first>扬</first>
<last>震</last>
</name>
<note>重案六组探员为人胆大心细沉着冷静富有人情味经历几次案件后更加成熟在成长中不断磨练是个真的汉子正应验那句话成就靠真本事</note>
</Contact>
<Contact>
<name>
<first>季</first>
<last>洁</last>
</name>
<note>重案六组探员富有人情味对扬震早已芳心默许知道为什么吗?因为她天生就爱保护别人当她看到扬震被别人用枪指着头吓的回不过神来时就对这个真实的男人产生了感觉真可谓巾帼不让须眉</note>
</Contact>
</ContactDetails>
导出联系人时在保存的路径文本框中输入一个文件路径程序将在该路径下创建一个XML文件如果该文件存在于该路径上程序将对该XML文件进行重写
为实现以上所述所有功能我专门编写了一个类来封装实现代码该类代码如下
namespace ContactApplication
{
using System;
using SystemXml;
using SystemText;
using SystemData;
using SystemWindowsForms;
using SystemComponentModel;
using SystemCollections;
/// <summary>
/// Contact 联系人
/// </summary>
public class Contact : IDisposable
{
private string xmlPath;
private XmlDocument xmlDoc;
private XmlNode selectNode;
private string firstName;
private string lastName;
private string note;
#region Contact 构造器
/// <summary>
/// 默认构造器
/// </summary>
public Contact()
{
thisxmlPath = //Contactxml;
thisselectNode = null;
thisxmlDoc = new XmlDocument();
thisxmlDocLoad(thisxmlPath);
thisfirstName = stringEmpty;
thislastName = stringEmpty;
thisnote = stringEmpty;
}
/// <summary>
/// 使用姓氏名字个人信息构造一个联系人对象
/// </summary>
/// <param name=firstName>姓氏</param>
/// <param name=lastName>名字</param>
/// <param name=note>个人信息</param>
public Contact(string firstName string lastName string note)
{
thisxmlPath = //Contactxml;
thisselectNode = null;
thisxmlDoc = new XmlDocument();
thisxmlDocLoad(thisxmlPath);
thisfirstName = firstName;
thislastName = lastName;
thisnote = note;
}
#endregion
#region Contact 资源释放方法
/// <summary>
/// 清理该对象所有正在使用的资源
/// </summary>
public void Dispose()
{
thisDispose(true);
GCSuppressFinalize(this);
}
/// <summary>
/// 释放该对象的实例变量
/// </summary>
/// <param name=disposing></param>
protected virtual void Dispose(bool disposing)
{
if (!disposing)
return;
if (thisxmlPath != null)
thisxmlPath = null;
if (thisxmlDoc != null)
thisxmlDoc = null;
if (thisselectNode != null)
thisselectNode = null;
if (thisfirstName != null)
thisfirstName = null;
if (thislastName != null)
thislastName = null;
if (thisnote != null)
thisnote = null;
}
#endregion
#region Contact 属性
/// <summary>
/// 姓氏
/// </summary>
public string FirstName
{
get
{
return thisfirstName;
}
set
{
thisfirstName = value;
}
}
/// <summary>
/// 名字
/// </summary>
public string LastName
{
get
{
return thislastName;
}
set
{
thislastName = value;
}
}
/// <summary>
/// 个人信息
<