C#对XML文件的各种操作实现方法

编程入门 行业动态 更新时间:2024-10-12 03:20:08
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】复制代码 代码如下: 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”);
  • 0
  • 0
  • 0
  • 0
  • 0

更多推荐

C#对XML文件的各种操作实现方法

本文发布于:2023-06-11 00:12:19,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/621990.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:操作   文件   方法   XML

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!