C#操作XML

来源:互联网 发布:mac如何给iphone刷机 编辑:程序博客网 时间:2024/04/30 17:19

引用命名空间:using System.Xml 

1.检查所要操作的xml文件是否存在:

   System.IO.File.Exists(文件路径及名称);

2.得到xml文件:

1)在asp.net中可以这样得到:

XmlDocument xmlDoc = new XmlDocument();

//导入xml文档

xmlDoc.Load( Server.MapPath("xmlTesting.xml"));

//导入字符串

//xmlDoc.LoadXml("<bookStore> <book id="01" price="3.5"> 读者</book></bookStore>");

注:Server.MapPath("xmlTesting.xml")此时的xmlTesting.xml文件必须是在当前的解决方案里;同样可以写成完整的物理路径xmlDoc.Load (@"E:"软件学习"测试"myNoteWeb"xmlTesting.xml")

2)在windForm 直接用物理路径得到所要操作的xml文件具体实现方法同上

3.创建xml文件:

 XmlDocument xmlDoc = new XmlDocument(); //创建xml文档(实例化一个xml)

XmlNode root = xmlDoc.CreateElement("bookStore");//创建根节点

//创建第1个子结点:

XmlNode bookNode = xmlDoc.CreateElement("book");

bookNode.InnerText = "读者";

//为此节点添加属性

 1

 bookPublishNode.SetAttribute("id", "01")

 root.AppendChild(bookNode);

2

 XmlAttribute xmlattribute = tempXmlDoc.CreateAttribute("price");

 xmlattribute.Value = "3.5";

 tempRoot .Attributes .Append (xmlattribute )

 //创建第2个根节点的子结点:

 XmlNode tempBookNode = xmlDoc.CreateElement("tempbook ");

 tempBookNode.InnerText ="文摘";

 root.AppendChild(tempBookNode);


实例1:

讲解C#操作Xml文件,并对其进行插入、修改、删除和显示的具体操作,具体代码如下:

假设已知有一个XML文件(bookstore.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");   
 
//================   
结果为:       
  
<?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>CS从入门到精通</title>   
<author>候捷</author>   
<price>58.3</price>   
</book>   
</bookstore>       
  
2、修改节点:将genre属性值为“李赞红“的节点的genre值改为“update李赞红”,将该节点的子节点<author>的文本修改为“亚胜”。   
  
XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的所有子节点   
foreach(XmlNode xn in nodeList)//遍历XML文档所有子节点   
{   
XmlElement xe=(XmlElement)xn;//将子节点类型转换为XmlElement类型   
if(xe.GetAttribute("genre")=="李赞红")//如果genre属性值为“李赞红”   
{   
xe.SetAttribute("genre","update李赞红");//则修改该属性为“update李赞红”   
  
XmlNodeList nls=xe.ChildNodes;//继续获取xe子节点的所有子节点   
foreach(XmlNode xn1 in nls)//遍历   
{   
XmlElement xe2=(XmlElement)xn1;//转换类型   
if(xe2.Name=="author")//如果找到   
{   
xe2.InnerText="亚胜";//则修改   
break;//找到退出来就可以了   
}   
}   
break;   
}   
}   
  
xmlDoc.Save("bookstore.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>CS从入门到精通</title>   
<author>亚胜</author>   
<price>58.3</price>   
</book>   
</bookstore>   
    
示例2:

这是一个用c#控制台程序下,  用XmlDocument 进行XML操作的的例子,包含了查询、增加、修改、删除、保存的基本操作。较完整的描述了一个XML的整个操作流程。适合刚入门.net XML操作的朋友参考和学习。 
假设有XML文件:books.xml 

<?xml version="1.0" encoding="UTF-8"?> 
<books> 
 <book> 
  <name>哈里波特</name> 
  <price>10</price> 
  <memo>这是一本很好看的书。</memo> 
 </book> 
 <book id="B02"> 
  <name>三国演义</name> 
  <price>10</price> 
  <memo>四大名著之一。</memo> 
 </book> 
 <book id="B03"> 
  <name>水浒</name> 
  <price>6</price> 
  <memo>四大名著之一。</memo> 
 </book> 
 <book id="B04"> 
  <name>红楼</name> 
  <price>5</price> 
  <memo>四大名著之一。</memo> 
 </book> 
</books>   

下面是为Program.cs 

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Xml; 

namespace TestXml 
    class Program 
    { 
        static void Main(string[] args) 
        { 
            XmlElement theBook = null, theElem = null, root = null; 
            XmlDocument xmldoc = new XmlDocument(); 
            try 
            { 
                xmldoc.Load("Books.xml"); 
                root = xmldoc.DocumentElement; 

                //---  新建一本书开始 ---- 
                theBook = xmldoc.CreateElement("book"); 
                theElem = xmldoc.CreateElement("name"); 
                theElem.InnerText = "新书"; 
                theBook.AppendChild(theElem); 

                theElem = xmldoc.CreateElement("price"); 
                theElem.InnerText = "20"; 
                theBook.AppendChild(theElem); 

                theElem = xmldoc.CreateElement("memo"); 
                theElem.InnerText = "新书更好看。"; 
                theBook.AppendChild(theElem); 
                root.AppendChild(theBook); 
                Console.Out.WriteLine("---  新建一本书开始 ----"); 
                Console.Out.WriteLine(root.OuterXml); 
                //---  新建一本书完成 ---- 

                //---  下面对《哈里波特》做一些修改。 ---- 
                //---  查询找《哈里波特》---- 
                theBook = (XmlElement)root.SelectSingleNode("/books/book[name=’’哈里波特’’]"); 
                Console.Out.WriteLine("---  查找《哈里波特》 ----"); 
                Console.Out.WriteLine(theBook.OuterXml); 
                //---  此时修改这本书的价格 ----- 
                theBook.GetElementsByTagName("price").Item(0).InnerText = "15";//getElementsByTagName返回的是NodeList,所以要跟上item(0) 
                Console.Out.WriteLine("---  此时修改这本书的价格 ----"); 
                Console.Out.WriteLine(theBook.OuterXml); 
                //---  另外还想加一个属性id,值为B01 ---- 
                theBook.SetAttribute("id", "B01"); 
                Console.Out.WriteLine("---  另外还想加一个属性id,值为B01 ----"); 
                Console.Out.WriteLine(theBook.OuterXml); 
                //---  对《哈里波特》修改完成。 ---- 

                //---  再将所有价格低于10的书删除  ---- 
                theBook = (XmlElement)root.SelectSingleNode("/books/book[@id=’’B02’’]"); 
                Console.Out.WriteLine("---  要用id属性删除《三国演义》这本书 ----"); 
                Console.Out.WriteLine(theBook.OuterXml); 
                theBook.ParentNode.RemoveChild(theBook); 
                Console.Out.WriteLine("---  删除后的XML ----"); 
                Console.Out.WriteLine(xmldoc.OuterXml); 

                //---  再将所有价格低于10的书删除  ---- 
                XmlNodeList someBooks = root.SelectNodes("/books/book[price<10]"); 
                Console.Out.WriteLine("---  再将所有价格低于10的书删除  ---"); 
                Console.Out.WriteLine("---  符合条件的书有 " + someBooks.Count + "本。  ---"); 

                for (int i = 0; i < someBooks.Count; i++) 
                { 
                    someBooks.Item(i).ParentNode.RemoveChild(someBooks.Item(i)); 
                } 
                Console.Out.WriteLine("---  删除后的XML ----"); 
                Console.Out.WriteLine(xmldoc.OuterXml); 

                xmldoc.Save("books.xml");//保存到books.xml 

                Console.In.Read(); 
            } 
            catch (Exception e) 
            { 
                Console.Out.WriteLine(e.Message); 
            } 
        } 
    } 

0 0