首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

C# Xml文档操作高速上手

2013-08-04 
C# Xml文档操作快速上手现在各大数据库公司都在开发Xml数据库(非关系型),而C#将对Xml的操作集成到了语言中

C# Xml文档操作快速上手
   现在各大数据库公司都在开发Xml数据库(非关系型),而C#将对Xml的操作集成到了语言中,使得程序操作Xml 十分简便,现在让你快速上手Xml操作。
首先我们要知道Xml是树形结构,所以节点的概念十分重要。我们先要知道这些方法和类,具体的应用见下面的代码。

XmlDocument Xml文档类
     重要方法有:
         Load(xmlPath);   //载入Xml文档,xmlPath为路径
         Save(xmlPath);   //保存Xml文档
     重要属性
          DocumentElement  //根节点

XmlElement 节点类
     重要方法:
         PrependChild(XmlElement childNode); //将childNode 添加到当前节点的第一个子节点
         AppendChild(XmlElement childNode); //将childNode 添加到当前节点的最后一个子节点
         SetAttribute(string "属性名",string "属性值");//设置当前节点属性
         SelectNodes(string 条件);  //通过条件得到子节点,若有多个,返回第一个具体见代码
         SelectSingleNode();      //意义同上,返回所有节点  xmlNodeList类
        
     重要属性:
          InnerText          //节点中的内容
          ChildNodes         //所有子节点  xmlNodeList类
          ParentNode        //父节点

先往一个Xml文档写入,再读取其中的内容   

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;

namespace XmlDeal
{
    //操作Xml文档
    class XmlDeal
    {
        private XmlDocument doc;
        private string xmlPath = "C:\\Users\\Administrator\\Desktop\\test.xml";
        public XmlDeal() {
            doc = new XmlDocument();
            //加载 Xml(在这之前,你得确保xml中有一个根节点,否则会报错),还可以用流来加载,这里就不演示了
            doc.Load(xmlPath);
        }
        public void xmlWrite() {
            //移除根节点下的所有节点

            doc.DocumentElement.RemoveAll();
           
            //注意如果按下面的写法写的话,会有一些节点没有被删除,以为根节点的子节点的count在变化,读者好好体会吧
            //foreach (XmlElement rootNode in doc.DocumentElement.ChildNodes) {
            //    rootNode.ParentNode.RemoveChild(rootNode);
            //}

            XmlElement node = doc.CreateElement("小说");
            //设置属性
            node.SetAttribute("序号","1");

            //新建子节点
            XmlElement childNode1 = doc.CreateElement("书名");
            node.PrependChild(childNode1);
            childNode1.InnerText = "哈利 波特";
            //插入到父节点的末尾
            node.AppendChild(childNode1);

            XmlElement childNode2 = doc.CreateElement("作者");
            node.PrependChild(childNode2);
            childNode2.InnerText = "杰克 罗琳";
            node.AppendChild(childNode2);

            XmlElement node2 = doc.CreateElement("小说");
            node2.SetAttribute("序号", "2");

            //新建子节点
            XmlElement childNode21 = doc.CreateElement("书名");
            node.PrependChild(childNode21);
            childNode21.InnerText = "致青春";
            //插入到父节点的末尾
            node2.AppendChild(childNode21);

            XmlElement childNode22 = doc.CreateElement("作者");
            node.PrependChild(childNode22);
            childNode22.InnerText = "辛夷坞";
            node2.AppendChild(childNode22);


            //获取文档的根节点,并将 node 添加到根节点的子节点的开头,注意append 不会覆盖以前的数据
            doc.DocumentElement.AppendChild(node);
            doc.DocumentElement.AppendChild(node2);
            doc.Save(xmlPath);
        }

        //查找读入xml中的信息
        public void xmlRead() {
            //得到父节点
            XmlElement root = doc.DocumentElement;

            //得到文本中内容的方法一,通过不断获得子节点获得其中的内容
            XmlNodeList nodeList = root.ChildNodes;
            foreach(XmlElement node in nodeList){
                foreach(XmlElement child in node.ChildNodes){
                    Console.WriteLine(child.InnerText);
                }
            }

            Console.WriteLine();

            //得到文本中的内容的方法二,通过表达式,读者可以比较下区别
            XmlNode node1 = doc.SelectSingleNode("/Book/小说/书名");
            Console.WriteLine(node1.InnerText);

            //[]中的是条件格式为  节点[@属性名='属性值']
            XmlNode node2 = doc.SelectSingleNode("/Book/小说[@序号= '2']/书名");
            Console.WriteLine(node2.InnerText);
           
        }
        public static void Main(string[] args) {
            XmlDeal xmlDeal = new XmlDeal();
            xmlDeal.xmlWrite();
            xmlDeal.xmlRead();
            while (true) { }
        }
    }
   

}

写入的Xml文件内容如下:
<Book>
  <小说 序号="1">
    <书名>哈利 波特</书名>
    <作者>杰克 罗琳</作者>
  </小说>
  <小说 序号="2">
    <书名>致青春</书名>
    <作者>辛夷坞</作者>
  </小说>
</Book>


输出如下:

哈利 波特
杰克 罗琳
致青春
辛夷坞

哈利 波特
致青春

若文章有知识性错误,欢迎指正!

热点排行