`
追梦--
  • 浏览: 37046 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

C# Xml文档操作快速上手

    博客分类:
  • c #
阅读更多
   现在各大数据库公司都在开发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);

            //通过节点名获得属性值
              Console.WriteLine(node2.Attributes["序号"].Value);
            
        }
        public static void Main(string[] args) {
            XmlDeal xmlDeal = new XmlDeal();
            xmlDeal.xmlWrite();
            xmlDeal.xmlRead();
            while (true) { }
        }
    }
    

}

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


输出如下:


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

哈利 波特
致青春
2

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

0
1
分享到:
评论

相关推荐

    C#datagrid控件导入导出xml文件demo

    C#datagrid控件导入导出xml文件demo,简单易用,方便新手学习领悟,快速上手,特别适合经常接受传输数据和做WEB方面工作的人。

    阿里巴巴nacos配置中心-C#客户端.zip

    # 阿里巴巴nacos配置中心-C#客户端 [Nacos配置中心](alibaba/nacos)的C#客户端,更多关于Nacos配置中心的介绍,可以查看[Nacos配置中心Wiki](alibaba/nacos/wiki)。 ### 特性 1. 容错兜底 2. 容易上手 3. 技术...

    XQuery权威指南(简码·扫描版)

     9.4 使用中间.XML文档 第10章 命名空间与XQuery  10.1 命名空间  10.2 命名空间和XQuery  10.3 查询中的命名空间声明  10.4 在结果中控制命名空间声明 第11章 深入了解类型  11.1 XQuery类型系统  11.2 ...

    小旋风垂直搜索平台,快速拱建垂直搜索引擎

    我们从设计之初就重视并解决这个问题,采用国际标准的xml/xpath路径描述语言,在我们的系统,html自动转换为标准的xml文档。然后使用类似html/title这样的路径来指向我们需要采集的内容。 什么人需要小旋风? 如果...

    驰骋工作流引擎源码

    D:\ccflow\VisualFlow\Data\XML xml配置文件不仅仅ccflow使用,bp框架也使用它。 用户数据目录。 D:\ccflow\VisualFlow\DataUser -- 用户数据目录。 D:\ccflow\VisualFlow\DataUser\Bill 单据打印生成数据. D:\...

    能用漂亮分页控件及Demo源码

    控件附带的完整的帮助文档及示例项目能够帮助您快速上手,熟悉AspNetPager控件的使用,您还可以通过给作者留言以及论坛提问等方式解决控件使用中遇到的问题。 Demo的主要功能有: 基本功能 分页按钮属性效果 使用...

    Nufsoft Nature Illusion Studio v2.31

    )加上下雨,下雪等效果,并提供九种预置的方案,只需看下其提供的范例就能上手,操作简单,发挥您天马行空的想象,即可将处理过的图象存为屏保,可选择程序,压缩为AVI 文件,和生成动画GIF文件,并能为它加上声音...

    e网企业2.0版

    是c#与xml技术相结合的产物,支持动态设定二级栏目,采用了开放式架构,建站模版自由添加。程序整合了(单一文本,新闻列表,图片列表 ,在线订单, 文件下载 , 留言板)六类插件,以所见即所得的方式,将烦锁的建...

    e网企业 v2.0

    一款适用于中小企业自助建站程序,是c#与xml技术相结合的产物,支持动态设定二级栏目,采用了开放式架构,建站模版自由添加。程序整合了(单一文本,新闻列表,图片列表 ,在线订单, 文件下载 , 留言板)六类...

    e网企业 v2.0-20041225

    是c#与xml技术相结合的产物,支持动态设定二级栏目,采用了开放式架构,建站模版自由添加。程序整合了(单一文本,新闻列表,图片列表 ,在线订单, 文件下载 , 留言板)六类插件,以所见即所得的方式,将烦锁的建...

    AspNetPager7.2分页控件及Demo源码

    AspNetPager7.2分页控件及Demo源码 ...控件附带的完整的帮助文档及示例项目能够帮助您快速上手,熟悉AspNetPager控件的使用,您还可以通过给作者留言以及论坛提问等方式解决控件使用中遇到的问题。

    aspose-ocr-cloud-dotnet:Aspose。 OCR Cloud .NET SDK是一种简单的OCR技术,您可以在应用程序中使用该技术将图像转换为文本

    详细来说,它是一组SDK,用于在我们的Cloud中进行光学字符识别和文档扫描。 它支持从最常用的光栅图像格式读取和识别文本。 只需将特定的图像传递给Aspose.OCR Cloud API,它将返回带有识别文本的响应。 Aspose.OCR...

Global site tag (gtag.js) - Google Analytics