zoukankan      html  css  js  c++  java
  • C#操作XML实例解析(创建、增、删、改) .

    需要添加的命名空间:

        using System.Xml;

        定义几个公共对象:

        XmlDocument xmldoc ;

        XmlNode xmlnode ;

        XmlElement xmlelem ;

        1,创建到服务器 同名目录下的xml文件:

        方法一:

        xmldoc = new XmlDocument ( ) ;

        //加入XML的声明段落

        xmlnode = xmldoc.CreateNode ( XmlNodeType.XmlDeclaration , "" , "" ) ;

        xmldoc.AppendChild ( xmlnode ) ;

        //加入一个根元素

        xmlelem = xmldoc.CreateElement ( "" , "Employees" , "" ) ;

        xmldoc.AppendChild ( xmlelem ) ;

        //加入另外一个元素

        for(int i=1;i<3;i )

        {

        XmlNode root=xmldoc.SelectSingleNode("Employees");//查找<Employees>

        XmlElement xe1=xmldoc.CreateElement("Node");//创建一个<Node>节点

        xe1.SetAttribute("genre","李赞红");//设置该节点genre属性

        xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性

        XmlElement xesub1=xmldoc.CreateElement("title");

        xesub1.InnerText="CS从入门到精通";//设置文本节点

        xe1.AppendChild(xesub1);//添加到<Node>节点中

        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);//添加到<Employees>节点中

        }

        //保存创建好的XML文档

        xmldoc.Save ( Server.MapPath("data.xml") ) ;

        //////////////////////////////////////////////////////////////////////////////////////

        结果:在同名目录下生成了名为data.xml的文件,内容如下,

        <?xml version="1.0"?>

        <Employees>

        <Node genre="李赞红" ISBN="2-3631-4">

        <title>CS从入门到精通</title>

        <author>候捷</author>

        <price>58.3</price>

        </Node>

        <Node genre="李赞红" ISBN="2-3631-4">

        <title>CS从入门到精通</title>

        <author>候捷</author>

        <price>58.3</price>

        </Node>

        </Employees>

        方法二:

        XmlTextWriter xmlWriter;

        string strFilename = Server.MapPath("data1.xml") ;

        xmlWriter = new XmlTextWriter(strFilename,Encoding.Default);//创建一个xml文档

        xmlWriter.Formatting = Formatting.Indented;

        xmlWriter.WriteStartDocument();

        xmlWriter.WriteStartElement("Employees");

        xmlWriter.WriteStartElement("Node");

        xmlWriter.WriteAttributeString("genre","李赞红");

        xmlWriter.WriteAttributeString("ISBN","2-3631-4");

        xmlWriter.WriteStartElement("title");

        xmlWriter.WriteString("CS从入门到精通");

        xmlWriter.WriteEndElement();

        xmlWriter.WriteStartElement("author");

        xmlWriter.WriteString("候捷");

        xmlWriter.WriteEndElement();

        xmlWriter.WriteStartElement("price");

        xmlWriter.WriteString("58.3");

        xmlWriter.WriteEndElement();

        xmlWriter.WriteEndElement();

        xmlWriter.Close();

        //////////////////////////////////////////////////////////////////////////////////////

        结果:

        <?xml version="1.0" encoding="gb2312"?>

        <Employees>

        <Node genre="李赞红" ISBN="2-3631-4">

        <title>CS从入门到精通</title>

        <author>候捷</author>

        <price>58.3</price>

        </Node>

        </Employees>

    2,添加一个结点:

        XmlDocument xmlDoc=new XmlDocument();

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

        XmlNode root=xmlDoc.SelectSingleNode("Employees");//查找<Employees>

        XmlElement xe1=xmlDoc.CreateElement("Node");//创建一个<Node>节点

        xe1.SetAttribute("genre","张三");//设置该节点genre属性

        xe1.SetAttribute("ISBN","1-1111-1");//设置该节点ISBN属性

        XmlElement xesub1=xmlDoc.CreateElement("title");

        xesub1.InnerText="C# 入门帮助";//设置文本节点

        xe1.AppendChild(xesub1);//添加到<Node>节点中

        XmlElement xesub2=xmlDoc.CreateElement("author");

        xesub2.InnerText="高手";

        xe1.AppendChild(xesub2);

        XmlElement xesub3=xmlDoc.CreateElement("price");

        xesub3.InnerText="158.3";

        xe1.AppendChild(xesub3);

        root.AppendChild(xe1);//添加到<Employees>节点中

        xmlDoc.Save ( Server.MapPath("data.xml") );

        //////////////////////////////////////////////////////////////////////////////////////

        结果:在xml原有的内容里添加了一个结点,内容如下,

        <?xml version="1.0"?>

        <Employees>

        <Node genre="李赞红" ISBN="2-3631-4">

        <title>CS从入门到精通</title>

        <author>候捷</author>

        <price>58.3</price>

        </Node>

        <Node genre="李赞红" ISBN="2-3631-4">

        <title>CS从入门到精通</title>

        <author>候捷</author>

        <price>58.3</price>

        </Node>

        <Node genre="张三" ISBN="1-1111-1">

        <title>C# 入门帮助</title>

        <author>高手</author>

        <price>158.3</price>

        </Node>

        </Employees>

        3,修改结点的值(属性和子结点):

        XmlDocument xmlDoc=new XmlDocument();

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

        XmlNodeList nodeList=xmlDoc.SelectSingleNode("Employees").ChildNodes;//获取Employees节点的所有子节点

        foreach(XmlNode xn in nodeList)//遍历所有子节点

        {

        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="亚胜";//则修改

        }

        }

        }

        }

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

        //////////////////////////////////////////////////////////////////////////////////////

        结果:将原来的所有结点的信息都修改了,xml的内容如下,

        <?xml version="1.0"?>

        <Employees>

        <Node genre="李赞红" ISBN="2-3631-4">

        <title>CS从入门到精通</title>

        <author>候捷</author>

        <price>58.3</price>

        </Node>

        <Node genre="李赞红" ISBN="2-3631-4">

        <title>CS从入门到精通</title>

        <author>候捷</author>

        <price>58.3</price>

        </Node>

        <Node genre="update张三" ISBN="1-1111-1">

        <title>C#入门帮助</title>

        <author>亚胜</author>

        <price>158.3</price>

        </Node>

        </Employees>

    4,修改结点(添加结点的属性和添加结点的自结点):

        XmlDocument xmlDoc=new XmlDocument();

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

        XmlNodeList nodeList=xmlDoc.SelectSingleNode("Employees").ChildNodes;//获取Employees节点的所有子节点

        foreach(XmlNode xn in nodeList)

        {

        XmlElement xe=(XmlElement)xn;

        xe.SetAttribute("test","111111");

        XmlElement xesub=xmlDoc.CreateElement("flag");

        xesub.InnerText="1";

        xe.AppendChild(xesub);

        }

        xmlDoc.Save( Server.MapPath("data.xml") );

        //////////////////////////////////////////////////////////////////////////////////////

        结果:每个结点的属性都添加了一个,子结点也添加了一个,内容如下,

        <?xml version="1.0"?>

        <Employees>

        <Node genre="李赞红" ISBN="2-3631-4" test="111111">

        <title>CS从入门到精通</title>

        <author>候捷</author>

        <price>58.3</price>

        <flag>1</flag>

        </Node>

        <Node genre="李赞红" ISBN="2-3631-4" test="111111">

        <title>CS从入门到精通</title>

        <author>候捷</author>

        <price>58.3</price>

        <flag>1</flag>

        </Node>

        <Node genre="update张三" ISBN="1-1111-1" test="111111">

        <title>C#入门帮助</title>

        <author>亚胜</author>

        <price>158.3</price>

        <flag>1</flag>

        </Node>

        </Employees>

        5,删除结点中的某一个属性:

        XmlDocument xmlDoc=new XmlDocument();

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

        XmlNodeList xnl=xmlDoc.SelectSingleNode("Employees").ChildNodes;

        foreach(XmlNode xn in xnl)

        {

        XmlElement xe=(XmlElement)xn;

        xe.RemoveAttribute("genre");//删除genre属性

        XmlNodeList nls=xe.ChildNodes;//继续获取xe子节点的所有子节点

        foreach(XmlNode xn1 in nls)//遍历

        {

        XmlElement xe2=(XmlElement)xn1;//转换类型

        if(xe2.Name=="flag")//如果找到

        {

        xe.RemoveChild(xe2);//则删除

        }

        }

        }

        xmlDoc.Save( Server.MapPath("data.xml") );

        //////////////////////////////////////////////////////////////////////////////////////]

        结果:删除了结点的一个属性和结点的一个子结点,内容如下,

        <?xml version="1.0"?>

        <Employees>

        <Node ISBN="2-3631-4" test="111111">

        <title>CS从入门到精通</title>

        <author>候捷</author>

        <price>58.3</price>

        </Node>

        <Node ISBN="2-3631-4" test="111111">

        <title>CS从入门到精通</title>

        <author>候捷</author>

        <price>58.3</price>

        </Node>

        <Node ISBN="1-1111-1" test="111111">

        <title>C#入门帮助</title>

        <author>亚胜</author>

        <price>158.3</price>

        </Node>

        </Employees>

    6,删除结点:

        XmlDocument xmlDoc=new XmlDocument();

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

        XmlNode root=xmlDoc.SelectSingleNode("Employees");

        XmlNodeList xnl=xmlDoc.SelectSingleNode("Employees").ChildNodes;

        for(int i=0;i<xnl.Count;i )

        {

        XmlElement xe=(XmlElement)xnl.Item(i);

        if(xe.GetAttribute("genre")=="张三")

        {

        root.RemoveChild(xe);

        if(i<xnl.Count)i=i-1;

        }

        }

        xmlDoc.Save( Server.MapPath("data.xml") );

        结果:删除了符合条件的所有结点,原来的内容:

        <?xml version="1.0"?>

        <Employees>

        <Node genre="李赞红" ISBN="2-3631-4">

        <title>CS从入门到精通</title>

        <author>候捷</author>

        <price>58.3</price>

        </Node>

        <Node genre="李赞红" ISBN="2-3631-4">

        <title>CS从入门到精通</title>

        <author>候捷</author>

        <price>58.3</price>

        </Node>

        <Node genre="张三" ISBN="1-1111-1">

        <title>C#入门帮助</title>

        <author>高手</author>

        <price>158.3</price>

        </Node>

        <Node genre="张三" ISBN="1-1111-1">

        <title>C#入门帮助</title>

        <author>高手</author>

        <price>158.3</price>

        </Node>

        </Employees>

        删除后的内容:

        <?xml version="1.0"?>

        <Employees>

        <Node genre="李赞红" ISBN="2-3631-4">

        <title>CS从入门到精通</title>

        <author>候捷</author>

        <price>58.3</price>

        </Node>

        <Node genre="李赞红" ISBN="2-3631-4">

        <title>CS从入门到精通</title>

        <author>候捷</author>

        <price>58.3</price>

        </Node>

        </Employees>

     

    转载字:http://blog.csdn.net/bravetmac/article/details/5831196

  • 相关阅读:
    飞入飞出效果
    【JSOI 2008】星球大战 Starwar
    POJ 1094 Sorting It All Out
    POJ 2728 Desert King
    【ZJOI 2008】树的统计 Count
    【SCOI 2009】生日快乐
    POJ 3580 SuperMemo
    POJ 1639 Picnic Planning
    POJ 2976 Dropping Tests
    SPOJ QTREE
  • 原文地址:https://www.cnblogs.com/codeloves/p/2769962.html
Copyright © 2011-2022 走看看