您的位置:首页 > 编程语言 > C#

C#中如何创建xml文件 增、删、改、查 xml节点信息

2015-05-28 19:30 603 查看
http://www.cr173.com/html/10704_1.html

【注:因为我们要使用xml相关的语法和方法,所以一定要引入命名空间 System.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 firstLevelElement = myXmlDoc.CreateElement("Computer");

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

firstLevelElement.SetAttribute("ID", "");

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

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

rootElement.AppendChild(firstLevelElement);

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

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

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

secondLevelElement.InnerText ="Lenovo";

firstLevelElement.AppendChild(secondLevelElement);

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

secondLevelElement.InnerText ="";

firstLevelElement.AppendChild(secondLevelElement);





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

firstLevelElement.SetAttribute("ID", "");

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

rootElement.AppendChild(firstLevelElement);

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

secondLevelElement.InnerText ="IBM";

firstLevelElement.AppendChild(secondLevelElement);

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

secondLevelElement.InnerText ="";

firstLevelElement.AppendChild(secondLevelElement);



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

myXmlDoc.Save(xmlFilePath);

}

catch (Exception ex)

{

Console.WriteLine(ex.ToString());

}

}

privatestaticvoid 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("{} = {}", name, value);

}

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

if (node.HasChildNodes)

{

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

XmlNode secondLevelNode = node.FirstChild;

//获取该节点的名字

string name = secondLevelNode.Name;

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

string innerText = secondLevelNode.InnerText;

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



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

XmlNode secondLevelNode = node.ChildNodes[];

name = secondLevelNode.Name;

innerText = secondLevelNode.InnerText;

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

}

}

}

catch (Exception ex)

{

Console.WriteLine(ex.ToString());

}

}

privatestaticvoid 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());

}

}

privatestaticvoid 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());

}

}

privatestaticvoid 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="" Description="Made in USA">

修改成为<Computer ID="" Description="Made in HongKong">);再之后通过AddXmlInformation方法向xml文件中添加了一个带有属性值的color节点;

最后通过DeleteXmlInformation方法将刚刚添加上的color节点删除掉。至此完成了对xml文件的基本操作:创建、读取、修改、添加、删除。

【注:想要将对xml文件所做的任何修改生效的话,必须调用Save方法,否则我们所做的修改不会保存】

【注:我们在创建节点的时候用的是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","");

    //为指定节点添加子节点

    root.AppendChild(node);

    //获取指定节点的指定属性值

    string id=node.Attributes["id"].Value;

    //获取指定节点中的文本

    string content=node.InnerText;

    //保存XML文件

    xml.Save(“xml文件存储的路径path”);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐