### XML文件的读写与操作详解 XML(Extensible Markup Language)是一种标记语言,用于存储和传输数据。本文将深入探讨如何使用C#语言来读取、修改并保存XML文件,涉及的关键概念包括:`XmlNodeList`、`XmlDocument`、`XmlNode`以及`XmlElement`等。 #### 一、XML文件的读取 在处理XML文件之前,我们首先需要了解XML文件的基本结构。以`bookstore.xml`为例: ```xml <?xml version="1.0" encoding="gb2312"?> <bookstore> <book genre="fantasy" ISBN="2-3631-4"> <title>Oberon's Legacy</title> <author>Corets, Eva</author> <price>5.95</price> </book> </bookstore> ``` 此XML文件包含了一个名为`bookstore`的根元素,该元素下有一个`book`子元素,其中包含了书的一些属性如`genre`、`ISBN`,以及具体的子元素如`title`、`author`和`price`。 接下来,我们将使用C#中的`XmlDocument`类来加载并解析这个XML文件: ```csharp XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("bookstore.xml"); ``` #### 二、XML节点的操作 通过`xmlDoc`对象,我们可以方便地获取和操作XML文档中的各个节点。例如,下面的代码用于获取`bookstore`节点: ```csharp XmlNode root = xmlDoc.SelectSingleNode("bookstore"); ``` 这里使用了`SelectSingleNode`方法来选取单个节点。如果需要获取多个节点,则可以使用`SelectNodes`方法。 #### 三、添加新的XML元素 接着,我们来看看如何向现有的XML文档中添加新的元素。以下代码展示了如何创建一个新的`book`元素,并设置其属性及子元素: ```csharp XmlElement xe1 = xmlDoc.CreateElement("book"); // 创建新的book元素 xe1.SetAttribute("genre", "科幻"); // 设置genre属性 xe1.SetAttribute("ISBN", "2-3631-4"); // 设置ISBN属性 // 创建子元素 XmlElement xesub1 = xmlDoc.CreateElement("title"); xesub1.InnerText = "计算机基础"; // 设置title的文本值 xe1.AppendChild(xesub1); XmlElement xesub2 = xmlDoc.CreateElement("author"); xesub2.InnerText = ""; // 这里可以设置作者名字 xe1.AppendChild(xesub2); XmlElement xesub3 = xmlDoc.CreateElement("price"); xesub3.InnerText = "58.3"; xe1.AppendChild(xesub3); // 将新创建的book元素添加到bookstore元素下 root.AppendChild(xe1); ``` #### 四、保存XML文档 在对XML文档进行了修改之后,我们需要将其保存回磁盘。这可以通过调用`Save`方法来完成: ```csharp xmlDoc.Save("bookstore.xml"); ``` 此时,`bookstore.xml`文件的内容将会更新为: ```xml <?xml version="1.0" encoding="gb2312"?> <bookstore> <book genre="fantasy" ISBN="2-3631-4"> <title>Oberon's Legacy</title> <author>Corets, Eva</author> <price>5.95</price> </book> <book genre="科幻" ISBN="2-3631-4"> <title>计算机基础</title> <author></author> <price>58.3</price> </book> </bookstore> ``` #### 五、更新XML文档中的元素 为了进一步展示如何操作XML文档,接下来我们来看如何修改文档中某个特定元素的值。假设我们需要找到所有`genre`属性值为“科幻”的`book`元素,并更新其作者信息: ```csharp XmlNodeList nodeList = xmlDoc.SelectSingleNode("bookstore").ChildNodes; // 获取所有子节点 foreach (XmlNode xn in nodeList) { XmlElement xe = (XmlElement)xn; // 转换为XmlElement类型 if (xe.GetAttribute("genre") == "科幻") // 检查genre是否为“科幻” { xe.SetAttribute("genre", "update科幻"); // 更新genre属性 XmlNodeList nls = xe.ChildNodes; // 获取book元素下的子节点 foreach (XmlNode xn1 in nls) { XmlElement xe2 = (XmlElement)xn1; // 转换为XmlElement类型 if (xe2.Name == "author") // 找到author元素 { xe2.InnerText = "John Doe"; // 更新author元素的值 break; // 结束循环 } } break; // 结束外层循环 } } xmlDoc.Save("bookstore.xml"); // 保存文件 ``` 这样,`bookstore.xml`文件的内容会被更新为: ```xml <?xml version="1.0" encoding="gb2312"?> <bookstore> <book genre="fantasy" ISBN="2-3631-4"> <title>Oberon's Legacy</title> <author>Corets, Eva</author> <price>5.95</price> </book> <book genre="update科幻" ISBN="2-3631-4"> <title>计算机基础</title> <author>John Doe</author> <price>58.3</price> </book> </bookstore> ``` ### 总结 本文介绍了如何使用C#进行XML文件的基本读写操作,包括如何加载和解析XML文件、创建和添加新的XML元素、更新现有元素的值以及最终保存更改后的XML文档。这些操作对于任何需要处理XML数据的应用程序都是非常有用的。
<?xml version="1.0" encoding="gb2312"?>
<bookstore>
<book genre="fantasy" ISBN="2-3631-4">
<title>Oberon's Legacy</title>
<author>Corets, Eva</author>
<price>5.95</price>
</book>
</bookstore>
1、往<bookstore>节点中插入一个<book>节点:
XmlDocument xmlDoc=new XmlDocument();
xmlDoc.Load("bookstore.xml");
XmlNode root=xmlDoc.SelectSingleNode("bookstore");//查找<bookstore>
XmlElement xe1=xmlDoc.CreateElement("book");//创建一个<book>节点
xe1.SetAttribute("genre","李赞红");//设置该节点genre属性
xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性
XmlElement xesub1=xmlDoc.CreateElement("title");
xesub1.InnerText="CS从入门到精通";//设置文本节点
xe1.AppendChild(xesub1);//添加到<book>节点中
XmlElement xesub2=xmlDoc.CreateElement("author");
xesub2.InnerText="候捷";
xe1.AppendChild(xesub2);
XmlElement xesub3=xmlDoc.CreateElement("price");
xesub3.InnerText="58.3";
xe1.AppendChild(xesub3);
root.AppendChild(xe1);//添加到<bookstore>节点中
xmlDoc.Save("bookstore.xml");
- 粉丝: 1
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助