在.NET 对XML的一些基本操作

本文介绍了使用C#语言创建和操作XML文件的方法,包括创建XML文件的两种方式及如何进行节点的增删改等操作。

  

  今天在网上根据自己的需要找了一些关于.NET下对XML操作的教程。对比之下,发现:代码的说服力远强于文字。当然,只是对我所需要的这点知识点来说是这样。废话少说,上代码!

首先是用C#代码创建XML文件,有两种方法。
 1  //这是第一种方法:
 2
 3ExpandedBlockStart.gifContractedBlock.gif        XmlDocument xmldoc; /**//*首先是声明一个XML文档。*/
 4ExpandedBlockStart.gifContractedBlock.gif        xmldoc = new XmlDocument();  /**//*实例化。*/
 5ExpandedBlockStart.gifContractedBlock.gif        XmlDeclaration xmldecl;  /**//*这里是声明一个XML的声明。*/
 6ExpandedBlockStart.gifContractedBlock.gif        xmldecl = xmldoc.CreateXmlDeclaration("1.0""UTF-8",null); /**//*分别对应 version,encoding,standalong。对standalong 属性的一些说明:这个属性指的是xml是否独立存在,即是否有一个额外的DTD文件。例如,当为yes时指的就是不纯在额外的和本XML相关连得DTD文件。  我真啰嗦。*/
 7ExpandedBlockStart.gifContractedBlock.gif        xmldoc.AppendChild(xmldecl); /**//*AppendChild()方法会添加节点,这里就是把声明 添加上了。*/
 8        XmlElement xmlele;
 9        xmlele = xmldoc.CreateElement("目录");
10ExpandedBlockStart.gifContractedBlock.gif        xmldoc.AppendChild(xmlele); /**//*声明,实例化,添加 根元素。*/
11ExpandedBlockStart.gifContractedBlock.gif        XmlNode xmlnod; /**//*声明一个节点,注意,是节点不是元素。节点是可以记录结构信息并修改结构的类,而元素还包含了属性和值的概念。 不一样啊!*/
12        for (int i = 0; i < 2++i)
13ExpandedBlockStart.gifContractedBlock.gif        {
14
15ExpandedSubBlockStart.gifContractedSubBlock.gif            xmlnod = xmldoc.SelectSingleNode("目录"); /**//*xmlnod节点记录了 包含有“目录”的节点位置。*/
16            XmlElement shuji;
17            shuji = xmldoc.CreateElement("书籍");
18            XmlElement shuming = xmldoc.CreateElement("书名");
19            if (0 == i)
20ExpandedSubBlockStart.gifContractedSubBlock.gif            {
21ExpandedSubBlockStart.gifContractedSubBlock.gif                shuming.InnerText = "我的书";/**//*向名为“书名”的元素中添加值。*/
22            }

23            else
24ExpandedSubBlockStart.gifContractedSubBlock.gif            {
25                shuming.InnerText = "你的书";
26            }

27ExpandedSubBlockStart.gifContractedSubBlock.gif            shuji.AppendChild(shuming); /**//*经创建的元素添加到另一元素下。 */
28            XmlElement zuozhe = xmldoc.CreateElement("作者");
29            if (0 == i)
30ExpandedSubBlockStart.gifContractedSubBlock.gif            {
31                zuozhe.InnerText = "";
32            }

33            else
34ExpandedSubBlockStart.gifContractedSubBlock.gif            {
35                zuozhe.InnerText = "";
36            }

37            shuji.AppendChild(zuozhe);
38            XmlElement jiage = xmldoc.CreateElement("价格");
39ExpandedSubBlockStart.gifContractedSubBlock.gif            jiage.SetAttribute("币种","人民币");/**//* 添加属性 SetAttribute(属性名,属性值)。*/
40            jiage.InnerText = "100";
41            shuji.AppendChild(jiage);
42            xmlnod.AppendChild(shuji);
43        }

44ExpandedBlockStart.gifContractedBlock.gif        xmldoc.Save(Server.MapPath("my.xml"));/**//*保存在 内存 中已经建立好的 XML文件。*/ 


 1  //这是第二种方法:      
 2ExpandedBlockStart.gifContractedBlock.gif        XmlTextWriter xmltw; /**//*声明一个表示提供快速、非缓存、只进方法的编写器,该方法生成包含 XML 数据的流或文件。*/
 3ExpandedBlockStart.gifContractedBlock.gif        String xmlfile = Server.MapPath("my2.xml");/**//*建立该XML文件。*/
 4ExpandedBlockStart.gifContractedBlock.gif        xmltw = new XmlTextWriter(xmlfile,null);/**//*指定要写入的文件和编码方式。莫忘!*/
 5ExpandedBlockStart.gifContractedBlock.gif        xmltw.Formatting = Formatting.Indented;/**//*制定写入格式,此处为缩进格式。*/
 6ExpandedBlockStart.gifContractedBlock.gif        xmltw.WriteStartDocument();/**//*本方法创建XML声明。*/
 7ExpandedBlockStart.gifContractedBlock.gif        xmltw.WriteStartElement("目录");/**//*本方法创建元素。*/
 8        xmltw.WriteStartElement("书籍");
 9        xmltw.WriteStartElement("书名");  //》》》》》》》》》》
10        xmltw.WriteString("我的书");// 此方法创建元素值         》 这三行代码创建了一个完整的元素包含:起始 值 结束。
11        xmltw.WriteEndElement();//此方法创建元素结束标识》》》》
12        xmltw.WriteStartElement("作者");
13        xmltw.WriteString("");
14        xmltw.WriteEndElement();
15        xmltw.WriteStartElement("价格");
16ExpandedBlockStart.gifContractedBlock.gif        xmltw.WriteAttributeString("币种","人民币");/**//*创建属性。*/
17        xmltw.WriteString("100");
18        xmltw.WriteEndElement();
19        xmltw.WriteEndElement();
20        xmltw.WriteStartElement("书籍");
21        xmltw.WriteStartElement("书名");
22        xmltw.WriteString("你的书");
23        xmltw.WriteEndElement();
24        xmltw.WriteStartElement("作者");
25        xmltw.WriteString("");
26        xmltw.WriteEndElement();
27        xmltw.WriteStartElement("价格");
28        xmltw.WriteAttributeString("币种""人民币");
29        xmltw.WriteString("100");
30        xmltw.WriteEndElement();
31        xmltw.WriteEndElement();
32        xmltw.WriteEndElement();

33ExpandedBlockStart.gifContractedBlock.gif        xmltw.Close();  /*关闭流*/

/**/

 

  这两种方法的结果(声明处ENCODING属性不一样其余一样,就上一个吧):

 1<?xml version="1.0" encoding="UTF-8"?>
 2<目录>
 3  <书籍>
 4    <书名>我的书</书名>
 5    <作者></作者>
 6    <价格 币种="人民币">100</价格>
 7  </书籍>
 8  <书籍>
 9    <书名>你的书</书名>
10    <作者></作者>
11    <价格 币种="人民币">100</价格>
12  </书籍>
13</目录>

  

以上就是这两种方法。总结一下:第一种方法是以xml文件的各个节点为单位,组装起来的。它的优势在于方便构造结构。还有,不同于第二种方法的生成文件方式,他是在内存中构造好然后用 Save()方法生成。  第二种方法的特点就如在第二句注释里说的“提供快速、非缓存、只进方法的编写器” ,是编写器。就像打字机一样把XML文件以流的方式一句一句表达出来,表达的过程中就直接生成了,不同与第一种方法的生成方式。第一种方式灵活,第二种快速。

下面是一些其他的操作,包括增,删,改。代码是直接贴过来的。我真是太懒了~~


 

   添加一个节点:

 1XmlDocument xmlDoc=new XmlDocument(); 
 2xmlDoc.Load(Server.MapPath("data.xml")); 
 3XmlNode root=xmlDoc.SelectSingleNode("Employees");//查找<Employees> 
 4XmlElement xe1=xmlDoc.CreateElement("Node");//创建一个<Node>节点 
 5xe1.SetAttribute("genre","张三");//设置该节点genre属性 
 6xe1.SetAttribute("ISBN","1-1111-1");//设置该节点ISBN属性 
 7
 8XmlElement xesub1=xmlDoc.CreateElement("title"); 
 9xesub1.InnerText="C#入门帮助";//设置文本节点 
10xe1.AppendChild(xesub1);//添加到<Node>节点中 
11XmlElement xesub2=xmlDoc.CreateElement("author"); 
12xesub2.InnerText="高手"
13xe1.AppendChild(xesub2); 
14XmlElement xesub3=xmlDoc.CreateElement("price"); 
15xesub3.InnerText="158.3"
16xe1.AppendChild(xesub3); 
17
18root.AppendChild(xe1);//添加到<Employees>节点中 
19xmlDoc.Save ( Server.MapPath("data.xml") );
20

  

   修改节点的值:

 1XmlDocument xmlDoc=new XmlDocument(); 
 2xmlDoc.Load( Server.MapPath("data.xml") ); 
 3
 4XmlNodeList nodeList=xmlDoc.SelectSingleNode("Employees").ChildNodes;//获取Employees节点的所有子节点 
 5
 6foreach(XmlNode xn in nodeList)//遍历所有子节点
 7ExpandedBlockStart.gifContractedBlock.gif
 8XmlElement xe=(XmlElement)xn;//将子节点类型转换为XmlElement类型,因为节点类型不能对属性操作!
 9if(xe.GetAttribute("genre")=="张三")//如果genre属性值为“张三” 
10ExpandedSubBlockStart.gifContractedSubBlock.gif
11xe.SetAttribute("genre","update张三");//则修改该属性为“update张三” 
12
13XmlNodeList nls=xe.ChildNodes;//继续获取xe子节点的所有子节点 
14foreach(XmlNode xn1 in nls)//遍历 
15ExpandedSubBlockStart.gifContractedSubBlock.gif
16XmlElement xe2=(XmlElement)xn1;//转换类型 
17if(xe2.Name=="author")//如果找到 
18ExpandedSubBlockStart.gifContractedSubBlock.gif
19xe2.InnerText="亚胜";//则修改
20}
  }
  }
  }
 

21xmlDoc.Save( Server.MapPath("data.xml") );//保存。

22

 

  删除节点和节点属性:

 1XmlDocument xmlDoc=new XmlDocument(); 
 2xmlDoc.Load( Server.MapPath("data.xml") ); 
 3XmlNodeList xnl=xmlDoc.SelectSingleNode("Employees").ChildNodes; 
 4foreach(XmlNode xn in xnl) 
 5ExpandedBlockStart.gifContractedBlock.gif
 6XmlElement xe=(XmlElement)xn; 
 7xe.RemoveAttribute("genre");//删除genre属性 
 8
 9XmlNodeList nls=xe.ChildNodes;//继续获取xe子节点的所有子节点 
10foreach(XmlNode xn1 in nls)//遍历 
11ExpandedSubBlockStart.gifContractedSubBlock.gif
12XmlElement xe2=(XmlElement)xn1;//转换类型 
13if(xe2.Name=="flag")//如果找到名字是flag的节点 
14ExpandedSubBlockStart.gifContractedSubBlock.gif
15xe.RemoveChild(xe2);//则从父节点删除此节点
16}
 
17}
 
18}
 
19xmlDoc.Save( Server.MapPath("data.xml") ); 
20

  暂时就这么多吧,不是玩XML编程的。0:47:03

转载于:https://www.cnblogs.com/machaoys/archive/2009/05/02/1447645.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值