在C#里利用XML进行数据读写以及修改

来源:互联网 发布:大学生网络惨案 编辑:程序博客网 时间:2024/06/05 11:15
<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?><root>    <group1>        <item/>        <item/>        <item/>    </group1>    <group2>    </group2></root>



首先来用C#进行建立含有以上内容的xml文档,保存在程序同目录下的"data.xml"里

注意,在xml里节点(Node)的意义是 "<xxx/>"或者"<xxx> xxx </xxx>",也就是说,是一个整体。

而元素(Element)的意义与节点有交集,但不等于节点,可以是是构成节点的几个元素,比如<aaa>是Element,而结尾的</aaa>叫做EndElement。

using System.Xml;XmlDocument xmlDoc = new XmlDocument();//声明XmlDeclaration dec = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null);xmlDoc.AppendChild(dec);//XmlElement root = xmlDoc.CreateElement("root");XmlElement group_1 = xmlDoc.CreateElement("group1");XmlElement group_2 = xmlDoc.CreateElement("group2");XmlElement item_1 = xmlDoc.CreateElement("item");        XmlElement item_2 = xmlDoc.CreateElement("item");XmlElement item_3 = xmlDoc.CreateElement("item");//group_1.AppendChild(item_1);group_1.AppendChild(item_2);group_1.AppendChild(item_3);root.AppendChild(group_1);root.AppendChild(group_2); xmlDoc.AppendChild(root);xmlDoc.Save("data.xml");

接下来,在root//group2中添加一个Name == "student"的元素

使其有自己的属性(Attribute) :id = "20051200",同时在innerText中添加"WPF"

<?xml version="1.0" encoding="utf-8"?><root>    <group1>        <item/>        <item/>        <item/>    </group1>    <group2>        <student id="20051200">WPF</student>    </group2></root>
C#代码如下:

XmlDocument doc = new XmlDocument();doc.Load("data.xml");XmlNode root = doc.SelectSingleNode("root//group2");//root指向root//group2//设置元素的内容XmlElement stu = doc.CreateElement("student");stu.SetAttribute("id", "20051200");stu.InnerText = "WPF";//添加到root//group2下,保存root.AppendChild(stu);doc.Save("data.xml")

接下来将root//group1中的item的innerText添加上字符串"aaa",即

<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?><root>    <group1>        <item>aaa</item>        <item>aaa</item>        <item>aaa</item>    </group1>    <group2>        <student id="20051200">WPF</student>    </group2></root>

C#代码如下:

XmlDocument doc = new XmlDocument();doc.Load("data.xml");XmlNode root = doc.SelectSingleNode("root//group1");//root指向root//group1XmlNodeList nodelist = root.ChildNodes;foreach (XmlNode t in nodelist){    t.innerText = "aaa";}doc.Save("data.xml")


接下来讨论删除子节点的问题,

分别用remove()和removeAll()

将group1,2里的节点全部删除,即

<?xml version="1.0" encoding="utf-8"?><root>    <group1>    </group1>    <group2>    </group2></root>
C#:

//删除root//gruop2//studentXmlDocument doc = new XmlDocument();doc.Load("data.xml");XmlNode node = doc.SelectSingleNode("root//group2//student");XmlNode parent = doc.SelectSingleNode("root//group2");parent.RemoveChild(node);doc.Save("1.xml");//删除root//group1中的所有节点XmlDocument doc = new XmlDocument();doc.Load("data.xml");XmlNode node = doc.SelectSingleNode("root//group1");node.RemoveAll();doc.Save("1.xml");

想要取出存储的一些属性也是比较方便的,通常可以把一些字符串存在innerText中

假如在做删除操作之前,我要取出student中的"WPF",打印在控制台上

XmlDocument doc = new XmlDocument();doc.Load("data.xml");XmlNode node = doc.SelectSingleNode("root//group2//student");string str = node.innerText;Console.WriteLine(str);doc.Save("1.xml");

如果要批量操作,可以参照上面提到的删除item操作一样,将一组node装入XmlNodeList里,用foreach操作。


0 0