必威体育Betway必威体育官网
当前位置:首页 > IT技术

C#对XML的基本操作

时间:2019-09-07 13:41:04来源:IT技术作者:seo实验室小编阅读:53次「手机版」
 

c# 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文件的节点信息作相应的操作?请看如下代码示例:

using System;

   using System.Collections.Generic;

   using System.Linq;

   using System.Text;

   using System.Xml;

   namespace OperateXML

  {

  class Program

{

static void Main(string[] args)

{

try

{

    //xml文件存储路径

    string myXMLFilePath = "E:\\MyComputers.xml";

    //生成xml文件

    GenerateXMLFile(myXMLFilePath);

    //遍历xml文件的信息

    GetXMLInformation(myXMLFilePath);

    //修改xml文件的信息

    ModifyXmlInformation(myXMLFilePath);

    //向xml文件添加节点信息

    AddXmlInformation(myXMLFilePath);

    //删除指定节点信息

    DeleteXmlInformation(myXMLFilePath);

}

catch (Exception ex)

{

    console.WriteLine(ex.ToString());

}

}

private static void GenerateXMLFile(string xmlFilePath)

{

try

{

    //初始化一个xml实例

    XmlDocument myXmlDoc = new XmlDocument();

    //创建xml的根节点

    XmlElement rootElement = myXmlDoc.CreateElement("Computers");

    //将根节点加入到xml文件中(APPendChild)

    myXmlDoc.appendChild(rootElement);

    //初始化第一层的第一个子节点

    XmlElement firstLevelElement1 = myXmlDoc.CreateElement("Computer");

    //填充第一层的第一个子节点的属性值(SetAttribute)

    firstLevelElement1.SetAttribute("ID", "11111111");

    firstLevelElement1.SetAttribute("Description", "Made in China");

    //将第一层的第一个子节点加入到根节点下

    rootElement.AppendChild(firstLevelElement1);

    //初始化第二层的第一个子节点

    XmlElement secondLevelElement11 = myXmlDoc.CreateElement("name");

    //填充第二层的第一个子节点的值(innertext

    secondLevelElement11.InnerText = "Lenovo";

    firstLevelElement1.AppendChild(secondLevelElement11);

    XmlElement secondLevelElement12 = myXmlDoc.CreateElement("price");

    secondLevelElement12.InnerText = "5000";

    firstLevelElement1.AppendChild(secondLevelElement12);

    XmlElement firstLevelElement2 = myXmlDoc.CreateElement("Computer");

    firstLevelElement2.SetAttribute("ID", "2222222");

    firstLevelElement2.SetAttribute("Description", "Made in USA");

    rootElement.AppendChild(firstLevelElement2);

    XmlElement secondLevelElement21 = myXmlDoc.CreateElement("name");

    secondLevelElement21.InnerText = "IBM";

    firstLevelElement2.AppendChild(secondLevelElement21);

    XmlElement secondLevelElement22 = myXmlDoc.CreateElement("price");

    secondLevelElement22.InnerText = "10000";

    firstLevelElement2.AppendChild(secondLevelElement22);

    //将xml文件保存到指定的路径下

    myXmlDoc.Save(xmlFilePath);

}

catch (Exception ex)

{

    Console.WriteLine(ex.ToString());

}

}

private static void GetXMLInformation(string xmlFilePath)

{

try

{

    //初始化一个xml实例

    XmlDocument myXmlDoc = new XmlDocument();

    //加载xml文件(参数为xml文件的路径)

    myXmlDoc.Load(xmlFilePath);

    //获得第一个姓名匹配的节点(SelectSingleNode):此xml文件的根节点

    XmlNode rootNode = myXmlDoc.SelectSingleNode("Computers");

    //分别获得该节点的InnerXml和OuterXml信息

    string innerXmlInfo = rootNode.InnerXml.ToString();

    string outerXmlInfo = rootNode.OuterXml.ToString();

    //获得该节点的子节点(即:该节点的第一层子节点)

    XmlNodeList firstLevelNodeList = rootNode.ChildNodes;

    foreach (XmlNode node in firstLevelNodeList)

    {

        //获得该节点的属性集合

        XmlAttributeCollection attributeCol = node.Attributes;

        foreach (XmlAttribute attri in attributeCol)

        {

            //获取属性名称与属性值

            string name = attri.Name;

            string value = attri.Value;

            Console.WriteLine("{0} = {1}", name, value);

        }

        //判断此节点是否还有子节点

        if (node.HasChildNodes)

        {

            //获取该节点的第一个子节点

            XmlNode secondLevelNode1 = node.FirstChild;

            //获取该节点的名字

            string name = secondLevelNode1.Name;

            //获取该节点的值(即:InnerText)

            string innerText = secondLevelNode1.InnerText;

            Console.WriteLine("{0} = {1}", name, innerText);

            //获取该节点的第二个子节点(用数组下标获取)

            XmlNode secondLevelNode2 = node.ChildNodes[1];

            name = secondLevelNode2.Name;

            innerText = secondLevelNode2.InnerText;

            Console.WriteLine("{0} = {1}", name, innerText);

        }

    }

}

catch (Exception ex)

{

    Console.WriteLine(ex.ToString());

}

}

private static void ModifyXmlInformation(string xmlFilePath)

{

try

{

    XmlDocument myXmlDoc = new XmlDocument();

    myXmlDoc.Load(xmlFilePath);

    XmlNode rootNode = myXmlDoc.FirstChild;

    XmlNodeList firstLevelNodeList = rootNode.ChildNodes;

    foreach (XmlNode node in firstLevelNodeList)

    {

        //修改此节点的属性值

        if (node.Attributes["Description"].Value.Equals("Made in USA"))

        {

            node.Attributes["Description"].Value = "Made in HongKong";

        }

    }

    //要想使对xml文件所做的修改生效,必须执行以下Save方法

    myXmlDoc.Save(xmlFilePath);

}

catch (Exception ex)

{

    Console.WriteLine(ex.ToString());

}

}

private static void AddXmlInformation(string xmlFilePath)

{

try

{

    XmlDocument myXmlDoc = new XmlDocument();

    myXmlDoc.Load(xmlFilePath);

    //添加一个带有属性的节点信息

    foreach (XmlNode node in myXmlDoc.FirstChild.ChildNodes)

    {

        XmlElement newElement = myXmlDoc.CreateElement("color");

        newElement.InnerText = "black";

        newElement.SetAttribute("IsMixed", "Yes");

        node.AppendChild(newElement);

    }

    //保存更改

    myXmlDoc.Save(xmlFilePath);

}

catch (Exception ex)

{

    Console.WriteLine(ex.ToString());

}

}

private static void DeleteXmlInformation(string xmlFilePath)

{

try

{

    XmlDocument myXmlDoc = new XmlDocument();

    myXmlDoc.Load(xmlFilePath);

    foreach (XmlNode node in myXmlDoc.FirstChild.ChildNodes)

    {

        //记录该节点下的最后一个子节点(简称:最后子节点)

        XmlNode lastNode = node.LastChild;

        //删除最后子节点下的左右子节点

        lastNode.RemoveAll();

        //删除最后子节点

        node.RemoveChild(lastNode);

    }

    //保存对xml文件所做的修改

    myXmlDoc.Save(xmlFilePath);

}

catch (Exception ex)

{

    Console.WriteLine(ex.ToString());

}

}

}

}

上面的这个例子,首先是通过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.jb51.net/article/35568.htm

相关阅读

C#中backgroundworker的使用

介绍: 根据MSDN介绍: BackgroundWorker 类允许您在单独的专用线程上运行操作。 耗时的操作(如下载和数据库事务)在长时间运行时可能

C#利用Picturebox控件显示图片

源文章:https://blog.csdn.net/liyuqian199695/article/details/54098938 C#利用Picturebox控件显示图片 1、Picturebox控件SizeM

xml文件详解

什么是xml; 1.xml是可扩展标记语言(Extensible Markup Langiage) 2.xml是一种标记语言,类似与HTML 3.xml的设计宗旨是传输数据,而

C#调用WebKit内核

系统要求 Windows与.NET框架 由于WebKit库和.NET框架的要求,WebKit .NET只能在Windows系统上运行。从版本0.4开始,最低要求包

c#里面委托(delegate)的讲解

在c#里面,有的时候一些代码的实现必须用到委托,比如:线程里面修改某个textBox的值,如果直接在线程里面写修改的代码,执行时候,编译器会

分享到:

栏目导航

推荐阅读

热门阅读