zoukankan      html  css  js  c++  java
  • C# 遍历XML文件,添加,更新,删除节点

    一,将XML文件添加到text文本中:

    方法1,最简单方式

     1 private void ReadFile()        
     2 
     3  { 
     4 
     5     string path =  Application.StartupPath + @"/bookstore.xml";
     6 
     7             byte[] myByte;
     8 
     9              //File.OpenRead(path);
    10 
    11              myByte = File.ReadAllBytes(path);
    12 
    13             this.textBox1.Text = string.Empty; 
    14 
    15             //this.textBox1.Text = new UnicodeEncoding().GetString(myByte);
    16 
    17              this.textBox1.Text = Encoding.UTF8.GetString(myByte);         
    18 
    19 }

    方法2,通过分析节点遍历XML添加

      1 private void Updata()         
      2 
      3 { 
      4 
      5             XmlReader reader = null; 
      6 
      7             try
      8 
      9              { 
     10 
     11                 // 创建XmlReaderSettings对象 
     12 
     13                 XmlReaderSettings settings = new XmlReaderSettings();
     14 
     15                  // 设置XmlReaderSettings对象的属性
     16 
     17                  settings.ProhibitDtd = false;
     18 
     19                  //settings.DtdProcessing = System.Xml.DtdProcessing.Ignore;
     20 
     21                  // 使用XmlReaderSettings对象来创建XmlReader对象 
     22 
     23                 reader = XmlReader.Create(path, settings);
     24 
     25                 ReadXml(reader);
     26 
     27              }  
     28 
     29            catch (Exception ex) 
     30 
     31             { 
     32 
     33                 MessageBox.Show(ex.Message);
     34 
     35              }
     36 
     37              finally
     38 
     39              {
     40 
     41                  if (reader != null)
     42 
     43                      reader.Close();
     44 
     45              } 
     46 
     47         }
     48 
     49         //按节点分析读取
     50 
     51          private void ReadXml(XmlReader reader)
     52 
     53          {
     54 
     55              this.textBox1.Text = string.Empty;
     56 
     57              try 
     58 
     59             { 
     60 
     61                 // 解析文件,并显示每一个节点 
     62 
     63                 while (reader.Read())  
     64 
     65                {
     66 
     67                      switch (reader.NodeType)
     68 
     69                      {  
     70 
     71                        case XmlNodeType.Element: 
     72 
     73                             if (reader.IsEmptyElement) // 空元素?
     74 
     75                              { 
     76 
     77                                 this.textBox1.Text += "<"+ reader.Name + "/>"+"
    "; 
     78 
     79                             } 
     80 
     81                             else
     82 
     83                              { 
     84 
     85                                 if (reader.HasAttributes)   // 属性?
     86 
     87                                  { 
     88 
     89                                     this.textBox1.Text += "<" + reader.Name + " ";
     90 
     91                                      while (reader.MoveToNextAttribute()) 
     92 
     93                                     {
     94 
     95                                          this.textBox1.Text += reader.Name + "="" + reader.Value + """;
     96 
     97                                      }
     98 
     99                                      this.textBox1.Text += ">
    ";
    100 
    101                                  } 
    102 
    103                                 else 
    104 
    105                                     this.textBox1.Text += "<" + reader.Name + ">"+"
    "; 
    106 
    107                             } 
    108 
    109                             break; 
    110 
    111                         case XmlNodeType.Text: 
    112 
    113                             this.textBox1.Text += reader.Value + "
    "; 
    114 
    115                             break;
    116 
    117                          case XmlNodeType.CDATA:
    118 
    119                              this.textBox1.Text += "<![CDATA[" + reader.Value + "]]>" + "
    ";
    120 
    121                              break;
    122 
    123                          case XmlNodeType.ProcessingInstruction:
    124 
    125                              this.textBox1.Text += "<?" + reader.Name + " " + reader.Value + "?>" + "
    ";
    126 
    127                              break;
    128 
    129                          case XmlNodeType.Comment:
    130 
    131                              this.textBox1.Text += "<!--" + reader.Value + "-->" + "
    ";
    132 
    133                              break;
    134 
    135                          case XmlNodeType.XmlDeclaration:
    136 
    137                              this.textBox1.Text += "<?xml version='1.0'?>" + "
    ";
    138 
    139                              break;
    140 
    141                          case XmlNodeType.Document:
    142 
    143                              break;
    144 
    145                          case XmlNodeType.DocumentType:
    146 
    147                              this.textBox1.Text += "<!DOCTYE " + reader.Name + " [" + reader.Value + "]>" + "
    "; 
    148 
    149                             break;
    150 
    151                          case XmlNodeType.EntityReference:
    152 
    153                              this.textBox1.Text += reader.Name + "
    "; 
    154 
    155                             break;
    156 
    157                          case XmlNodeType.EndElement:
    158 
    159                              this.textBox1.Text += "</" + reader.Name + ">" + "
    "; 
    160 
    161                             break;
    162 
    163                      } 
    164 
    165                 } 
    166 
    167             } 
    168 
    169             catch (XmlException ex)
    170 
    171              {
    172 
    173                  MessageBox.Show(ex.Message);
    174 
    175              }
    176 
    177          }

    方法3,读取子节点

     1  //读取子节点
     2         private void UpdataXML()
     3         {
     4             XmlNode xn = xmlDoc.SelectSingleNode("bookstore");
     5 
     6             XmlNodeList xnl = xn.ChildNodes;
     7 
     8             this.textBox1.Text = string.Empty;
     9 
    10             foreach (XmlNode xnf in xnl)
    11             {
    12                 XmlElement xe = (XmlElement)xnf;
    13                 //Console.WriteLine(xe.GetAttribute("genre"));//显示属性值
    14                 //Console.WriteLine(xe.GetAttribute("ISBN"));
    15                 XmlNodeList xnf1 = xe.ChildNodes;
    16                 foreach (XmlNode xn2 in xnf1)
    17                 {
    18                     //Console.WriteLine(xn2.InnerText);//显示子节点点文本
    19                     this.textBox1.Text += xn2.InnerText + "
    ";
    20                 }
    21             }
    22         }

    二,将XML添加到treeView控件中

     1  
     2             private XmlDocument xmlDoc;
     3             string path = Application.StartupPath + @"/bookstore.xml";
     4             xmlDoc = new XmlDocument();
     5             xmlDoc.Load(path);
     6             treeViewXML.Nodes.Clear();
     7             XmlNode stu = xmlDoc.DocumentElement;
     8             foreach (XmlNode node in stu.ChildNodes)
     9             {
    10                 TreeNode studentNode;
    11                 studentNode = treeViewXML.Nodes.Add(node.Name);
    12                 foreach (XmlNode nodes in node.ChildNodes)
    13                 {
    14                     studentNode.Nodes.Add(nodes.InnerText);
    15                 }
    16             }

    三,创建XML文件

    在C#.net中如何操作XML 需要添加的命名空间: using System.Xml;

    定义几个公共对象: XmlDocument xmldoc ; XmlNode xmlnode ; XmlElement xmlelem ;

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

     1 //方法一:
     2 xmldoc = new XmlDocument ( ) ;
     3 //加入XML的声明段落,<?xml version="1.0" encoding="gb2312"?>
     4 XmlDeclaration xmldecl;
     5  xmldecl = xmldoc.CreateXmlDeclaration("1.0","gb2312",null);
     6  xmldoc.AppendChild ( xmldecl);
     7 
     8 //加入一个根元素
     9 xmlelem = xmldoc.CreateElement ( "" , "Employees" , "" ) ;
    10 xmldoc.AppendChild ( xmlelem ) ;
    11 //加入另外一个元素
    12 for(int i=1;i<3;i++)
    13 {
    14 
    15 XmlNode root=xmldoc.SelectSingleNode("Employees");//查找<Employees> 
    16 XmlElement xe1=xmldoc.CreateElement("Node");//创建一个<Node>节点 
    17 xe1.SetAttribute("genre","李赞红");//设置该节点genre属性 
    18 xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性
    19 
    20 XmlElement xesub1=xmldoc.CreateElement("title"); 
    21 xesub1.InnerText="CS从入门到精通";//设置文本节点 
    22 xe1.AppendChild(xesub1);//添加到<Node>节点中 
    23 XmlElement xesub2=xmldoc.CreateElement("author"); 
    24 xesub2.InnerText="候捷"; 
    25 xe1.AppendChild(xesub2); 
    26 XmlElement xesub3=xmldoc.CreateElement("price"); 
    27 xesub3.InnerText="58.3"; 
    28 xe1.AppendChild(xesub3);
    29 
    30 root.AppendChild(xe1);//添加到<Employees>节点中 
    31 }
    32 //保存创建好的XML文档
    33 xmldoc.Save ( Server.MapPath("data.xml") ) ;

    //////////////////////////////////////////////////////////////////////////////////////
    结果:在同名目录下生成了名为data.xml的文件,内容如下,
    <?xml version="1.0" encoding="gb2312"?>
    <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>

     1 方法二:
     2 XmlTextWriter xmlWriter;
     3    string strFilename = Server.MapPath("data1.xml") ;
     4 
     5    xmlWriter = new XmlTextWriter(strFilename,Encoding.Default);//创建一个xml文档
     6    xmlWriter.Formatting = Formatting.Indented;
     7    xmlWriter.WriteStartDocument();
     8    xmlWriter.WriteStartElement("Employees");
     9 
    10    xmlWriter.WriteStartElement("Node");
    11    xmlWriter.WriteAttributeString("genre","李赞红");
    12    xmlWriter.WriteAttributeString("ISBN","2-3631-4");
    13 
    14    xmlWriter.WriteStartElement("title");
    15    xmlWriter.WriteString("CS从入门到精通");
    16    xmlWriter.WriteEndElement();
    17 
    18    xmlWriter.WriteStartElement("author");
    19    xmlWriter.WriteString("候捷");
    20    xmlWriter.WriteEndElement();
    21 
    22    xmlWriter.WriteStartElement("price");
    23    xmlWriter.WriteString("58.3");
    24    xmlWriter.WriteEndElement();
    25 
    26    xmlWriter.WriteEndElement();
    27 
    28    xmlWriter.Close();
    29 //////////////////////////////////////////////////////////////////////////////////////

    结果:
    <?xml version="1.0" encoding="gb2312"?>
    <Employees>
      <Node genre="李赞红" ISBN="2-3631-4">
        <title>CS从入门到精通</title>
        <author>候捷</author>
        <price>58.3</price>
      </Node>
    </Employees>


    四,添加节点

     1             XmlNode root = xmlDoc.SelectSingleNode("bookstore");//查找<bookstore>
     2             XmlElement xe1 = xmlDoc.CreateElement("book");//创建一个<book>节点
     3             xe1.SetAttribute("genre", "李赞红");//设置该节点genre属性
     4             xe1.SetAttribute("ISBN", "2-3631-4");//设置该节点ISBN属性
     5 
     6             XmlElement xesub1 = xmlDoc.CreateElement("title");
     7             xesub1.InnerText = "CS从入门到精通";//设置文本节点
     8             xe1.AppendChild(xesub1);//添加到<book>节点中
     9 
    10             XmlElement xesub2 = xmlDoc.CreateElement("author");
    11             xesub2.InnerText = "候捷";
    12             xe1.AppendChild(xesub2);
    13             XmlElement xesub3 = xmlDoc.CreateElement("price");
    14             xesub3.InnerText = "58.3";
    15             xe1.AppendChild(xesub3);
    16 
    17             root.AppendChild(xe1);//添加到<bookstore>节点中
    18             xmlDoc.Save("bookstore.xml");

    五,更新节点

     1                   XmlNodeList nodeList = xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的所有子节点
     2             foreach (XmlNode xn in nodeList)//遍历所有子节点
     3             {
     4                 XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
     5                 if (xe.GetAttribute("genre") == "李赞红")//如果genre属性值为“李赞红”
     6                 {
     7                     xe.SetAttribute("genre", "林芳");//则修改该属性为“update李赞红”
     8 
     9                     XmlNodeList nls = xe.ChildNodes;//继续获取xe子节点的所有子节点
    10                     foreach (XmlNode xn1 in nls)//遍历
    11                     {
    12                         XmlElement xe2 = (XmlElement)xn1;//转换类型
    13                         if (xe2.Name == "author")//如果找到
    14                         {
    15                             xe2.InnerText = "李胜";//则修改
    16                             break;//找到退出来就可以了
    17                         }
    18                     }
    19                     break;
    20                 }
    21             }
    22 
    23             xmlDoc.Save("bookstore.xml");//保存。

    六,删除节点

     1             private bool first,second;            
     2             XmlNodeList xnl = xmlDoc.SelectSingleNode("bookstore").ChildNodes;
     3             foreach (XmlNode xn in xnl)
     4             {
     5                 XmlElement xe = (XmlElement)xn;
     6                 if (xe.GetAttribute("genre") == "fantasy")
     7                 {
     8                     xe.RemoveAttribute("genre");//删除genre属性
     9                     first = true;
    10                 }
    11                 else if (xe.GetAttribute("genre") == "林芳")
    12                 {
    13                     xe.RemoveAll();//删除该节点的全部内容
    14                     second = true;
    15                 }
    16                 if (first && second)
    17                     break;
    18             }
    19             xmlDoc.Save("bookstore.xml");
  • 相关阅读:
    [de2_tv] PAL制TV_VGA
    【转】NiosII中SDRAM相移计算
    VGA controller的代码分析
    TIOBE 2012年2月编程语言排行榜:C#力压C++
    ZendFramework入门2 使用布局
    转载 20个数据库设计最佳实践
    转载 20个很有用的CSS图形和图表技术和教程
    转载 10款实用的Ajax/JavaScript编码工具推荐
    转载 打造优秀Web设计的10项原则
    2012年1月编程语言排行榜:ObjectiveC成为年度语言
  • 原文地址:https://www.cnblogs.com/ygd-boke/p/4398256.html
Copyright © 2011-2022 走看看