通过XmlDocument加载XML数据到内存,很多时候仅仅是只读方式访问XML数据还不够,需要添加、修改、删除XML文档中的某些结点。通 过XmlDocument类可以方便地进行XML数据的修改,本节将介绍如何通过XmlDocument类修改XML结点的值。
通过XmlDocument类修改XML文档数据,通常需要以下几个主要步骤或其中几个步骤。
(1)获取一个包含XML文档数据的XmlDocument类对象,通常有两种方法来实现这个功能:
通过17.2.3节所介绍方法加载已有XML数据。
通过XmlDocument类的构造函数创建不包含任何结点的空对象,常用默认构造函数。
(2)通过XmlDocument类的ChildNodes和Item属性获取某个结点(XmlNode类型),通过XmlNode的Name、Value、InnerText等属性修改选中结点的数据。
(3)通过XmlDocument类的CreateElement()和CreateAttribute()方法,创建新的元素结点和属性结点,并 通过XmlNode的Name、Value、InnerText等属性设置新结点的属性。CreateElement()和 CreateAttribute()的常用定义如下。
CreateElement(string name):创建具有指定限定名的元素结点,其中name表示元素结点的限定名,返回XmlElement类型对象。
CreateAttribute(string name):创建具有指定限定名的属性结点,其中name表示属性结点的限定名,返回XmlAttribute类型对象。
(4)通过XmlDocument类的CreateXmlDeclaration()方法创建一个XML文档说明,并通过XmlDocument.AppendChild()方法添加到XML文档中。CreateXmlDeclaration()的定义如下。
CreateXmlDeclaration(string version, string encoding, string standalone):创建一 个具有指定版本和编码的XML文档说明。其中,version表示版本,encoding表示XML文档的编码格式,默认为utf- 8,standalone表示是否在XML声明上写出独立属性,可选yes或no。
(5)通过XmlDocument类的CreateComment()方法创建一个具有指定文本的XML注释,并通过XmlDocument.AppendChild()方法添加到XML文档中。
CreateComment(string data):创建包含指定文本的XML注释,其中data表示注释的文本内容。返回XmlComment类型对象。
(6)通过XmlDocument类的Save()方法保存一个XML文档数据到文件或数据流,它包含以下重载版本:
Save(Stream sr):将内存中的XML文档数据保存到指定的数据流,其中,sr表示一个特定的可以写入的数据流。
Save(string filename):将内存中的XML文档数据保存到指定的文件,其中,filename表示XML文件名。
Save(TextWriter tw):将内存中的XML文档数据保存到指定的文本数据写入器,其中,tw表示一个文本写入器对象。
Save(XmlWriter xw):将内存中的XML文档数据保存到指定的XML数据写入器,其中,xw表示一个XML数据写入器对象。
示例代码17-5是CreateUserList()的代码片段,首先,创建XmlDocument对象xmlDoc。然后,通过 CreateXXX()方法创建对应的结点和属性,并通过AppendXXX()方法添加属性和子元素。最后,通过Save()方法将XML数据保存到文 件C:\UserList.XML中。
示例代码17-5
- static void CreateUserList( )
- {
- //创建XmlDocument对象xmlDoc
- XmlDocument xmlDoc = new XmlDocument( );
- //创建一个XML文档声明,并添加到文档
- XmlDeclaration declare = xmlDoc.CreateXmlDeclaration("1.0", "utf-8",
- "yes");
- xmlDoc.AppendChild(declare);
- //创建并添加UserList结点
- XmlElement userListEle = xmlDoc.CreateElement("UserList");
- xmlDoc.AppendChild(userListEle);
- //创建并添加Count属性
- XmlAttribute countAttr = xmlDoc.CreateAttribute("Count");
- countAttr.Value = "1";
- userListEle.Attributes.Append(countAttr);
- //创建并添加User结点
- XmlElement userEle = xmlDoc.CreateElement("User");
- userListEle.AppendChild(userEle);
- //创建并添加ID属性
- XmlAttribute idAttr = xmlDoc.CreateAttribute("ID");
- idAttr.Value = "001";
- userEle.Attributes.Append(idAttr);
- //创建并添加Name元素
- XmlElement nameEle = xmlDoc.CreateElement("Name");
- nameEle.InnerText = "李四";
- userEle.AppendChild(nameEle);
- //通过Save()方法保存数据到XML文件UserList.XML中
- xmlDoc.Save(@"C:\UserList.XML");
- }
方法CreateUserList()生成的UserList.XML文档内容如下所示。从中可见,通过XmlDocument.Save()方法保存的XML数据,会自动在文件中添加换行和制表符等空白,使得XML数据看起来整齐美观。
- <?xml version="1.0" encoding="utf-8" standalone="yes"?>
- <UserList Count="1">
- <User ID="001">
- <Name>李四</Name>
- </User>
- </UserList>