zoukankan      html  css  js  c++  java
  • 解析XML【C#】

    解析XML【C#】

     

     1.XML元素
    XML元素包含一个开标记、元素中的数据、闭标记
    例如:<book>book name</book>
    其中book是元素名称  book name是元素数据
    元素名称区分大小写
    每一个XML文档中必须有一个根元素
    2.XML属性
    属性添加在元素的开标记内
    <book titile = "book name"></book>或者<book title = 'book name'></book>
    属性的值可以用双引号也可以用单引号
    3.元素与属性举例
    <book><title>book name</title></book>
    <book title = "book name"></book>
    上述两种没有本质的区别,但使用时建议使用第一种,因为可以对元素增加属性或子元素,但是不能这样操作属性。
    4.XML读取解析
    DOM解析XML文档:XML的文档结构是个树状结构
    DOM的类在System.Xml中
    XmlDocument:用于加载XML文件存放的磁盘位置
    XmlNode:这个类表示文档书中的一个节点
    XmlNodeList:表示一个节点的集合
    XmlElement:表示XML文档中的一个元素
    XmlAttribute:表示XML的一个属性
    XmlText:表示开标记和闭标记之间的文本
    (1)XmlDocument:加载xml文档
    例:XmlDocument document = new XmlDocument();
        document.load(@"D:C#ooks.xml");
    (2)XmlElement:用于返回一个元素实例
       XmlElement element = document.DocumentElement; //常用来返回一个根节点
       XmlElement类包含许多方法和属性,可以处理树的节点和属性
       1)FirstChild:返回根元素节点后的第一个子节点
       2)LastChild:返回根元素节点后的最后一个子节点
       3)ParentNode:返回当前元素的父节点
       4)NextSibling:返回当前节点的父节点下的下一个节点
       5)HasChildNodes:用来检查当前元素是否有子元素
    (3)XmlText:表示开关标记之间的文本,是特殊的节点,属性有:
       1)InnerText:获取当前节点范围内的所有子节点的文本连接起来的字符串
       2)InnerXml:获取当前节点范围内的所有子节点的文本连接起来的字符串,包含标记
    5.XML修改解析
     (1)创建节点

       创建节点方法:
       1)CreateElement:用来创建XmlDocument类型的节点
       2)CreateAttribute:用来创建XmlAttribute类型的节点
       3)CreateTextNode:用来创建XmlTextNode类型的节点
       4)CreateNode:用来创建任意类型的节点,包含上述三种以及其他
       创建节点后添加操作:
       1)AppendChild:把创建的节点类型追加到XmlNode类型或其他派生类型的节点后
       2)InsertAfter:将新节点插入到特定的位置
       3)InsertBefore:将新节点插入到特定位置
     (2)删除节点
      1)RemoveChild:删除当前节点范围内的一个指定的子节点
      2)RemoveAll:删除该节点范围内的所有子节点
     (3)修改节点
      1)ReplaceChild:用新子节点替换旧子节点
    6.XML查询解析
     (1)使用XmlDocument 方法

       XmlDocument document = new XmlDocument();
       document.Load(filePath);
       XmlNodeList list = document.GetElementsByTagName("book");
       foreach (XmlNode node in list) 
       {
         listBox1.Items.Add(node.Name);//listBox1类型是ListBox
       }
     (2)使用XPath选择特定的节点的方法
      1)SelectSingleNode:用来选择一个节点,如果有多个,则返回第一个节点
      2)SelectNodes:返回一个节点的集合,类型是XmlNodesList
     选择特定的节点的方法参数XPath
      XPath是XML文档的查询语言

    7.XML解析代码

    [csharp] view plaincopy
     
    1. using System;  
    2. using System.Data;  
    3. using System.Drawing;  
    4. using System.Text;  
    5. using System.Windows.Forms;  
    6. using System.IO;  
    7. using System.Xml;  
    8.   
    9. namespace Update  
    10. {  
    11.     public partial class Form1 : Form  
    12.     {  
    13.   
    14.         string filePath = Directory.GetCurrentDirectory() + @"uploadXML.xml";  
    15.         public Form1()  
    16.         {  
    17.             InitializeComponent();  
    18.         }  
    19.   
    20.         //读取xml  
    21.         private void button1_Click(object sender, EventArgs e)  
    22.         {  
    23.   
    24.             if (File.Exists(filePath))  
    25.             {  
    26.   
    27.                 XmlDocument document = new XmlDocument();  
    28.                 document.Load(filePath);  
    29.                 XmlNode root = (XmlNode)document.DocumentElement;  
    30.                 //循环展示成树状  
    31.                 xmlProcess(root,0);  
    32.   
    33.             }  
    34.             
    35.         }  
    36.           
    37.   
    38.         /* 
    39.          * 循环展示成树状 
    40.          */  
    41.         private void xmlProcess(XmlNode root,int i)   
    42.         {  
    43.   
    44.             if (root == null)   
    45.             {  
    46.                 return;  
    47.             }  
    48.             if (root is XmlElement)   
    49.             {  
    50.                 listBox1.Items.Add(root.Name.PadLeft(root.Name.Length + i));  
    51.                 if (root.HasChildNodes)   
    52.                 {  
    53.                     xmlProcess(root.FirstChild,i+2);  
    54.                 }  
    55.                 if (root.NextSibling != null)   
    56.                 {  
    57.                     xmlProcess(root.NextSibling, i);  
    58.                 }  
    59.   
    60.             }  
    61.             else if (root is XmlText)   
    62.             {  
    63.                 string text = ((XmlText)root).Value;  
    64.                 listBox1.Items.Add(text.PadLeft(text.Length+i));  
    65.             }  
    66.         }  
    67.   
    68.         //读取文本节点  
    69.         private void button2_Click(object sender, EventArgs e)  
    70.         {  
    71.             XmlDocument document = new XmlDocument();  
    72.             document.Load(filePath);  
    73.             XmlNode root = (XmlNode)document.DocumentElement;  
    74.             string values = root.InnerText;  
    75.             string values2 = root.InnerXml;  
    76.             string values3 = root.Value;  
    77.             MessageBox.Show(values);  
    78.             MessageBox.Show(values2);  
    79.             MessageBox.Show(values3);  
    80.         }  
    81.         //添加节点  
    82.         private void button3_Click(object sender, EventArgs e)  
    83.         {  
    84.             XmlDocument document = new XmlDocument();  
    85.             document.Load(filePath);  
    86.             XmlElement root = document.DocumentElement;  
    87.   
    88.             //create node  
    89.             XmlElement newBook = document.CreateElement("book");  
    90.             XmlElement newTitle = document.CreateElement("title");  
    91.             XmlElement newAuthor = document.CreateElement("author");  
    92.               
    93.             //create text  
    94.             XmlText titleText = document.CreateTextNode("new title");  
    95.             XmlText authorText = document.CreateTextNode("new author");  
    96.   
    97.             //insert  
    98.             newTitle.AppendChild(titleText);  
    99.             newAuthor.AppendChild(authorText);  
    100.   
    101.             newBook.AppendChild(newTitle);  
    102.             newBook.AppendChild(newAuthor);  
    103.   
    104.             root.AppendChild(newBook);  
    105.   
    106.             //save  
    107.             document.Save(filePath);  
    108.   
    109.   
    110.   
    111.   
    112.         }  
    113.         //删除节点  
    114.         private void button4_Click(object sender, EventArgs e)  
    115.         {  
    116.             XmlDocument document = new XmlDocument();  
    117.             document.Load(filePath);  
    118.             XmlElement root = document.DocumentElement;  
    119.             if (root.HasChildNodes)   
    120.             {  
    121.                 XmlNode old = root.LastChild;  
    122.                 root.RemoveChild(old);  
    123.             }  
    124.   
    125.             document.Save(filePath);  
    126.   
    127.         }  
    128.         //修改节点  
    129.         private void button5_Click(object sender, EventArgs e)  
    130.         {  
    131.             XmlDocument document = new XmlDocument();  
    132.             document.Load(filePath);  
    133.             XmlElement root = document.DocumentElement;  
    134.             if (root.HasChildNodes)  
    135.             {  
    136.                 XmlNode oldNode = root.LastChild;  
    137.                 XmlNode newNode = document.CreateElement("Book");  
    138.                 root.ReplaceChild(newNode, oldNode);  
    139.             }  
    140.   
    141.             document.Save(filePath);  
    142.   
    143.         }  
    144.         //查询节点  
    145.         private void button6_Click(object sender, EventArgs e)  
    146.         {  
    147.             listBox1.Items.Clear();  
    148.   
    149.             XmlDocument document = new XmlDocument();  
    150.             document.Load(filePath);  
    151.             XmlNodeList list = document.GetElementsByTagName("book");//要查询的的节点名  
    152.             foreach (XmlNode node in list)   
    153.             {  
    154.                 listBox1.Items.Add(node.Name);  
    155.             }  
    156.         }  
    157.   
    158.     }  
    159. }  
  • 相关阅读:
    安卓iOS软件免编程开发步骤
    我的站被收录了两次,被封掉两次,怎么办?
    百度算法调整 优化网站该从哪几方面着手?
    如何成为php编程高手
    百度等搜索引擎寻找各种数据库网站的方法
    【网站抓取】如何正确识别Baiduspider移动ua
    EditPlus 技巧大全:[1]怎么配置PHP编译环境
    如何本地搭建php环境用来测试PHP程序教程!
    用最简洁的代码构建MVC分层
    BMR计算器2——python第三课(字符串分割,格式化输出,异常处理)
  • 原文地址:https://www.cnblogs.com/omg24/p/4169630.html
Copyright © 2011-2022 走看看