zoukankan      html  css  js  c++  java
  • C#中如何创建xml文件 增、删、改、查 xml节点信息

    XML:Extensible Markup Language(可扩展标记语言)的缩写,是用来定义其它语言的一种元语言,其前身是SGML(Standard Generalized
    Markup Language,标准通用标记语言)。它没有标签集(tag set),也没有语法规则(grammatical rule),但是它有句法规则(syntax rule)。
    任何XML文档对任何类型的应用以及正确的解析都必须是良构的(well-formed),即每一个打开的标签都必须有匹配的结束标签,不得
    含有次序颠倒的标签,并且在语句构成上应符合技术规范的要求。XML文档可以是有效的(valid),但并非一定要求有效。所谓有效文档是指其符合其文档
    类型定义(DTD)的文档。如果一个文档符合一个模式(schema)的规定,那么这个文档是"模式有效的(schema valid)"。  
    XML文件在存储、交换和传输数据信息上有着很方便处理,那么今天这篇文章主要讲一下用C#如何实现对XML文件的基本操作,
    如:创建xml文件,增、删、改、查xml的节点信息。所使用的方法很基础,方便易懂(用于自己的学习和记忆只需,同时也希望能够给你带来一些帮助,
    如有不合适的地方欢迎大家批评指正)。
      本文的主要模块为:    
    ① :生成xml文件    
    ② :遍历xml文件的节点信息    
    ③ :修改xml文件的节点信息    
    ④ :向xml文件添加节点信息    
    ⑤ :删除指定xml文件的节点信息假设我们需要设计出这样的一个xml文件来存储相应的信息,如下所示:
    <Computers>
    <Computer ID="11111111" Description="Made in China">
    <name>Lenovo</name>
    <price>5000</price>
    </Computer>
    <Computer ID="2222222" Description="Made in USA">
    <name>IBM</name>
    <price>10000</price>
    </Computer>
    </Computers>

      那么如何生成这个xml文件?又怎么读取这个xml文件的节点信息,以及如何对这个xml文件的节点信息作相应的操作?请看如下代码示例:
      【注:因为我们要使用xml相关的语法和方法,所以一定要引入命名空间 System.Xml】
    1using System;
    2 using System.Collections.Generic;
    3 using System.Linq;
    4 using System.Text;
    5 using System.Xml;
    6
    7 namespace OperateXML
    8{
    9class Program
    10 {
    11staticvoid Main(string[] args)
    12 {
    13try
    14 {
    15//xml文件存储路径
    16string myXMLFilePath ="E:\MyComputers.xml";
    17//生成xml文件
    18 GenerateXMLFile(myXMLFilePath);
    19//遍历xml文件的信息
    20 GetXMLInformation(myXMLFilePath);
    21//修改xml文件的信息
    22 ModifyXmlInformation(myXMLFilePath);
    23//向xml文件添加节点信息
    24 AddXmlInformation(myXMLFilePath);
    25//删除指定节点信息
    26 DeleteXmlInformation(myXMLFilePath);
    27 }
    28catch (Exception ex)
    29 {
    30 Console.WriteLine(ex.ToString());
    31 }
    32 }
    33
    34privatestaticvoid GenerateXMLFile(string xmlFilePath)
    35 {
    36try
    37 {
    38//初始化一个xml实例
    39 XmlDocument myXmlDoc =new XmlDocument();
    40//创建xml的根节点
    41 XmlElement rootElement = myXmlDoc.CreateElement("Computers");
    42//将根节点加入到xml文件中(AppendChild)
    43 myXmlDoc.AppendChild(rootElement);
    44
    45//初始化第一层的第一个子节点
    46 XmlElement firstLevelElement1 = myXmlDoc.CreateElement("Computer");
    47//填充第一层的第一个子节点的属性值(SetAttribute)
    48 firstLevelElement1.SetAttribute("ID", "11111111");
    49 firstLevelElement1.SetAttribute("Description", "Made in China");
    50//将第一层的第一个子节点加入到根节点下
    51 rootElement.AppendChild(firstLevelElement1);
    52//初始化第二层的第一个子节点
    53 XmlElement secondLevelElement11 = myXmlDoc.CreateElement("name");
    54//填充第二层的第一个子节点的值(InnerText)
    55 secondLevelElement11.InnerText ="Lenovo";
    56 firstLevelElement1.AppendChild(secondLevelElement11);
    57 XmlElement secondLevelElement12 = myXmlDoc.CreateElement("price");
    58 secondLevelElement12.InnerText ="5000";
    59 firstLevelElement1.AppendChild(secondLevelElement12);
    60
    61
    62 XmlElement firstLevelElement2 = myXmlDoc.CreateElement("Computer");
    63 firstLevelElement2.SetAttribute("ID", "2222222");
    64 firstLevelElement2.SetAttribute("Description", "Made in USA");
    65 rootElement.AppendChild(firstLevelElement2);
    66 XmlElement secondLevelElement21 = myXmlDoc.CreateElement("name");
    67 secondLevelElement21.InnerText ="IBM";
    68 firstLevelElement2.AppendChild(secondLevelElement21);
    69 XmlElement secondLevelElement22 = myXmlDoc.CreateElement("price");
    70 secondLevelElement22.InnerText ="10000";
    71 firstLevelElement2.AppendChild(secondLevelElement22);
    72
    73//将xml文件保存到指定的路径下
    74 myXmlDoc.Save(xmlFilePath);
    75 }
    76catch (Exception ex)
    77 {
    78 Console.WriteLine(ex.ToString());
    79 }
    80 }
    81
    82privatestaticvoid GetXMLInformation(string xmlFilePath)
    83 {
    84try
    85 {
    86//初始化一个xml实例
    87 XmlDocument myXmlDoc =new XmlDocument();
    88//加载xml文件(参数为xml文件的路径)
    89 myXmlDoc.Load(xmlFilePath);
    90//获得第一个姓名匹配的节点(SelectSingleNode):此xml文件的根节点
    91 XmlNode rootNode = myXmlDoc.SelectSingleNode("Computers");
    92//分别获得该节点的InnerXml和OuterXml信息
    93string innerXmlInfo = rootNode.InnerXml.ToString();
    94string outerXmlInfo = rootNode.OuterXml.ToString();
    95//获得该节点的子节点(即:该节点的第一层子节点)
    96 XmlNodeList firstLevelNodeList = rootNode.ChildNodes;
    97foreach (XmlNode node in firstLevelNodeList)
    98 {
    99//获得该节点的属性集合
    100 XmlAttributeCollection attributeCol = node.Attributes;
    101foreach (XmlAttribute attri in attributeCol)
    102 {
    103//获取属性名称与属性值
    104string name = attri.Name;
    105string value = attri.Value;
    106 Console.WriteLine("{0} = {1}", name, value);
    107 }
    108
    109//判断此节点是否还有子节点
    110if (node.HasChildNodes)
    111 {
    112//获取该节点的第一个子节点
    113 XmlNode secondLevelNode1 = node.FirstChild;
    114//获取该节点的名字
    115string name = secondLevelNode1.Name;
    116//获取该节点的值(即:InnerText)
    117string innerText = secondLevelNode1.InnerText;
    118 Console.WriteLine("{0} = {1}", name, innerText);
    119
    120//获取该节点的第二个子节点(用数组下标获取)
    121 XmlNode secondLevelNode2 = node.ChildNodes[1];
    122 name = secondLevelNode2.Name;
    123 innerText = secondLevelNode2.InnerText;
    124 Console.WriteLine("{0} = {1}", name, innerText);
    125 }
    126 }
    127 }
    128catch (Exception ex)
    129 {
    130 Console.WriteLine(ex.ToString());
    131 }
    132 }
    133
    134privatestaticvoid ModifyXmlInformation(string xmlFilePath)
    135 {
    136try
    137 {
    138 XmlDocument myXmlDoc =new XmlDocument();
    139 myXmlDoc.Load(xmlFilePath);
    140 XmlNode rootNode = myXmlDoc.FirstChild;
    141 XmlNodeList firstLevelNodeList = rootNode.ChildNodes;
    142foreach (XmlNode node in firstLevelNodeList)
    143 {
    144//修改此节点的属性值
    145if (node.Attributes["Description"].Value.Equals("Made in USA"))
    146 {
    147 node.Attributes["Description"].Value ="Made in HongKong";
    148 }
    149 }
    150//要想使对xml文件所做的修改生效,必须执行以下Save方法
    151 myXmlDoc.Save(xmlFilePath);
    152 }
    153catch (Exception ex)
    154 {
    155 Console.WriteLine(ex.ToString());
    156 }
    157
    158 }
    159
    160privatestaticvoid AddXmlInformation(string xmlFilePath)
    161 {
    162try
    163 {
    164 XmlDocument myXmlDoc =new XmlDocument();
    165 myXmlDoc.Load(xmlFilePath);
    166//添加一个带有属性的节点信息
    167foreach (XmlNode node in myXmlDoc.FirstChild.ChildNodes)
    168 {
    169 XmlElement newElement = myXmlDoc.CreateElement("color");
    170 newElement.InnerText ="black";
    171 newElement.SetAttribute("IsMixed", "Yes");
    172 node.AppendChild(newElement);
    173 }
    174//保存更改
    175 myXmlDoc.Save(xmlFilePath);
    176 }
    177catch (Exception ex)
    178 {
    179 Console.WriteLine(ex.ToString());
    180 }
    181 }
    182
    183privatestaticvoid DeleteXmlInformation(string xmlFilePath)
    184 {
    185try
    186 {
    187 XmlDocument myXmlDoc =new XmlDocument();
    188 myXmlDoc.Load(xmlFilePath);
    189foreach (XmlNode node in myXmlDoc.FirstChild.ChildNodes)
    190 {
    191//记录该节点下的最后一个子节点(简称:最后子节点)
    192 XmlNode lastNode = node.LastChild;
    193//删除最后子节点下的左右子节点
    194 lastNode.RemoveAll();
    195//删除最后子节点
    196 node.RemoveChild(lastNode);
    197 }
    198//保存对xml文件所做的修改
    199 myXmlDoc.Save(xmlFilePath);
    200 }
    201catch (Exception ex)
    202 {
    203 Console.WriteLine(ex.ToString());
    204 }
    205 }
    206 }
    207}
    208上面的这个例子,首先是通过GenerateXMLFile方法在E盘创建出了我们预想的xml文件;然后通过GetXMLInformation方法对刚刚生成的xml文件进行了信息的读取;
    之后通过ModifyXmlInformation方法对xml文件信息作出相应的修改(<Computer ID="2222222" Description="Made in USA">
    修改成为<Computer ID="2222222" Description="Made in HongKong">);再之后通过AddXmlInformation方法向xml文件中添加了一个带有属性值的color节点;
    最后通过DeleteXmlInformation方法将刚刚添加上的color节点删除掉。至此完成了对xml文件的基本操作:创建、读取、修改、添加、删除。
    【注1:想要将对xml文件所做的任何修改生效的话,必须调用Save方法,否则我们所做的修改不会保存】
    【注2:我们在创建节点的时候用的是XmlElement,但是读取节点信息的时候却用的是XmlNode,这里强调一点:XmlElement是XmlNode的继承,可以调用更多的方法
        实现相应所需的功能】
      
      最后简单集中的总结一下对xml进行操作的基本方法,如下所示:
        //所需要添加的命名空间
        using System.Xml;
        //初始化一个xml实例
        XmlDocument xml=new XmlDocument();

        //导入指定xml文件
        xml.Load(“xml文件路径path”);

        //指定一个节点
        XmlNode root=xml.SelectSingleNode("节点名称");

        //获取节点下所有直接子节点
        XmlNodeList childlist=root.ChildNodes;

        //判断该节点下是否有子节点
        root.HasChildNodes;

        //获取同名同级节点集合
        XmlNodeList nodelist=xml.SelectNodes("节点名称");

        //生成一个新节点
        XmlElement node=xml.CreateElement("节点名称");

        //将节点加到指定节点下,作为其子节点
        root.AppendChild(node);

        //将节点加到指定节点下某个子节点前
        root.InsertBefore(node,root.ChildeNodes[i]);

        //为指定节点的新建属性并赋值
        node.SetAttribute("id","11111");

        //为指定节点添加子节点
        root.AppendChild(node);

        //获取指定节点的指定属性值
        string id=node.Attributes["id"].Value;

        //获取指定节点中的文本
        string content=node.InnerText;

        //保存XML文件
        xml.Save(“xml文件存储的路径path”);

    转自:http://www.cr173.com/html/10704_1.html

  • 相关阅读:
    AutoFac
    MEF 基础简介 四
    MEF 基础简介 三
    MEF 基础简介 二
    MEF 基础简介 一
    Ioc原理理解
    .NET里面 abstract class和Interface有什么区别以及用法的展现?
    .NET-ORM框架EF-Code First代码优先
    SQL SERVER PIVOT与用法解释
    SQL Server 中的 NOLOCK 到底是什么意思?
  • 原文地址:https://www.cnblogs.com/yubufan/p/3442900.html
Copyright © 2011-2022 走看看