1、操作XML文档的两种常用方式:

1)使用XmlReader类和XmlWriter类操作

 XmlReader是基于数据流的,占用极少的内存,是只读方式的,所以速度极快.只能采用遍历的模式查找数据节点。

(1)创建XmlReader对象:使用XmlReader的静态方法Create创建。以下为该方法的各种重载版本。

   public static XmlReader Create(TextReader input);//通过TextReader对象创建
       public static XmlReader Create(string inputUri);//通过xml文档路径创建
       public static XmlReader Create(Stream input, XmlReaderSettings settings);//通过流对象创建
       public static XmlReader Create(TextReader input, XmlReaderSettings settings);
       public static XmlReader Create(string inputUri, XmlReaderSettings settings);
       public static XmlReader Create(XmlReader reader, XmlReaderSettings settings);
       public static XmlReader Create(Stream input, XmlReaderSettings settings, string baseUri);
       public static XmlReader Create(Stream input, XmlReaderSettings settings, XmlParserContext inputContext);
       public static XmlReader Create(TextReader input, XmlReaderSettings settings, string baseUri);
       public static XmlReader Create(TextReader input, XmlReaderSettings settings, XmlParserContext inputContext);
       public static XmlReader Create(string inputUri, XmlReaderSettings settings, XmlParserContext inputContext);

(2)遍历文档:有好几种方式,一般以Read()方法开始遍历,Read方法可以进入读取完当前节点后,可以自动进入下一节点,然后可以通过HasValue判断该节点是否有值,通过HasAttribute判断是否有属性值

  XmlReader reader = XmlReader.Create("myXmldocument.xml");
      while (reader.Read())
      {
        if (reader.NodeType == XmlNodeType.Element)
         {...}

   if (reader.HasValue)
         {...}
        if (reader.HasAttributes)
         {...}
      }

(3)读取节点的数据:通过XmlReader对象的各个属性、方法获取,具体可查看msdn。如可通过Value属性获取当前节点的值,通过ReadElementString()返回文本,也可通过ReadElementContentAs的几个版本获取,并强制转换为对应的类型,如ReadElementContentAsString()、ReadElementContentAsDouble()....等方法.

  XmlReader reader = XmlReader.Create("myXmldocument.xml");

  string valueStr=String.Empty;
      while (!reader.EOF)
      {
         if (reader.MoveToContent() == XmlNodeType.Element && reader.Name == "title")
          {
              valueStr=reader.ReadElementString() ;
          }
          else
          {
              reader.Read();
          }
      }

XmlWriter 是一个提供一种快速、非缓存和只进的方式来生成包含 XML 数据的流或文件的类,常用用法如下。

XmlWriter xmlWriter = XmlWriter.Create("myconfig.xml");//创建xmlwriter对象
xmlWriter.WriteStartDocument();//开始写xml文档
xmlWriter.WriteStartElement("AlgorithmData");//写入元素
xmlWriter.WriteStartAttribute("AlgorithmTypeId");    //写入AlgorithmData的属性AlgorithmTypeId的属性名
xmlWriter.WriteValue("1");  //写入AlgorithmData的属性AlgorithmTypeId的属性值
.....其他属性的写入
xmlWriter.WriteEndElement();//结束AlgorithmData节点的写入
.....其他节点的写入
xmlWriter.WriteEndDocument();//结束文档的写入
xmlWriter.Flush();//将XML文档写入磁盘
xmlWriter.Close();//关闭XML文档

2)使用XDocument类操作

XmlDocument是基于树形结构的模型,数据保存于内存中,可以查找内存中数据的任何节点的数据。占用内存大,处理方便,可读可写,几乎想当于一次把Xml读入内存.

以下是读取xml文档的示例,该类的具体api详见msdn的接口描述: https://msdn.microsoft.com/zh-cn/library/system.xml.linq.xdocument_methods(v=vs.100).aspx

try
{
  List<AlgorithmData> algorithmDataList = new List<AlgorithmData>();
  XDocument xd = XDocument.Load(configPath);//加载xml文档   var root = xd.Root;//读取根节点
  var rootXElements = root.Elements("AlgorithmData");//获取根节点下所有AlgorithmData节点
  foreach (XElement element in rootXElements)//循环读取AlgorithmData节点列表
  {
    AlgorithmData model = new AlgorithmData();     model.TargetSceneTypeId = int.Parse(element.Attribute("TargetSceneTypeId").Value);//读取节点属性
    model.AlgorithmSceneName = element.Attribute("AlgorithmSceneName").Value;
    model.AlgorithmTypeId = int.Parse(element.Attribute("AlgorithmTypeId").Value);
    string[] detectRegionTypeStringArray = element.Attribute("DetectRegionTypeList").Value.Split(',');
    List<int> detectRegionTypeList = new List<int>();
    foreach(string str in detectRegionTypeStringArray)
    {
      detectRegionTypeList.Add(int.Parse(str));
    }
    model.DetectRegionTypeList = detectRegionTypeList;
    model.IsUseable = bool.Parse(element.Attribute("IsUseable").Value);
    algorithmDataList.Add(model);
  }   return algorithmDataList;
}
catch (Exception ex)
{
  throw ex;
}

  

操作xml文档的常用方式的更多相关文章

  1. 操作XML文档遇到的XMLNS问题及解决方法 (C# 和 PHP)

    原文:操作XML文档遇到的XMLNS问题及解决方法 (C# 和 PHP) 不管是用 PHP 还是 C#, 在操作 XML 的时候我们除了一个节点一个节点去取值之外, 还有一个非常方便的表达式, 就是 ...

  2. 文档对象模型操作xml文档

    简介 :文档对象模型(DOM)是一种用于处理xml文档的API函数集. 2.1文档对象模型概述 按照W3C的定义,DOM是“一种允许程序或脚本动态地访问更新文档内容,结构和样式的.独立于平台和语言的规 ...

  3. C# 操作XML文档 使用XmlDocument类方法

    W3C制定了XML DOM标准.很多编程语言中多提供了支持W3C XML DOM标准的API.我在之前的文章中介绍过如何使用Javascript对XML文档进行加载与查询.在本文中,我来介绍一下.Ne ...

  4. 用ORM的思想操作XML文档,一个对象就搞定不要太简单。滚蛋吧!XmlDocument、XmlNode、Xml***……

    大家有没有这样的感受,一涉及XML文档操作就得百度一遍.是不是非!常!烦!.各种类型,各种方法,更别提为了找到一个节点多费劲.本来想写个XML操作的工具方法,写了两行一想既然XML文档是有规律的,如果 ...

  5. C#操作XML文档---基础

    增查改删代码如下 public void CreateXML() { XmlDocument xml = new XmlDocument(); xml.AppendChild(xml.CreateXm ...

  6. C#XmlHelper操作Xml文档的帮助类

    using System.Xml; using System.Data; namespace DotNet.Utilities { /// <summary> /// Xml的操作公共类 ...

  7. XPath操作XML文档

    NET框架下的Sytem.Xml.XPath命名空间提供了一系列的类,允许应用XPath数据模式查询和展示XML文档数据. 3.1XPath介绍 主要的目的是在xml1.0和1.1文档节点树种定位节点 ...

  8. [XML] C# XmlHelper操作Xml文档的帮助类 (转载)

    点击下载 XmlHelper.rar 主要功能如下所示 /// <summary> /// 类说明:XmlHelper /// 编 码 人:苏飞 /// 联系方式:361983679 // ...

  9. C#操作XML文档(XmlDocument、XmlNode、XmlAttribute、SelectSingleNode、SelectNodes、XmlNodeList)

    XML文档是一种通用的文档,这种文档既可以用.config作为后缀也可以用.xml作为后缀.XML文档主要由元素节点和节点的属性共同构成的.它有且仅有一个根节点,其他的节点全部都是根节点的子节点或者子 ...

随机推荐

  1. MySQL并发复制系列二:多线程复制

     http://blog.itpub.net/28218939/viewspace-1975822/ 并发复制(Parallel Replication) 系列二: Enhanced Multi-th ...

  2. 《RESTful Web Services》第三章 设计表述

    3.1 如何使用实体头来注解表述     表述不仅仅是以某种格式序列化后的数据,它是一连串字节加上用于描述那些字节的元数据.     Content-Type,用于描述表述类型.这个标头告诉接收方如何 ...

  3. 关于Android M RuntimePermission的问题

    关于shouldShowRequestPermissionRationale的理解, 在onRequestPermissionsResult里如果用户拒绝了权限, 可以调用这个api, 返回true, ...

  4. C#_MySql 主从复制

    一.业务发展驱动数据发展 随着网站业务的不断发展,用户量的不断增加,数据量成倍地增长,数据库的访问量也呈线性地增长.特别是在用户访问高峰期间,并发访问量突然增大,数据库的负载压力也会增大,如果架构方案 ...

  5. android源码编译常见错误

    错误1:You are attempting to build on a 32-bit system. Only 64-bit build environments are supported bey ...

  6. 管理Activity

     开源中国摘取的代码,这个可以管理activity 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...

  7. 为什么我要称自己为Javascript程序员

    Aaron Griffin写了一篇精彩的牢骚文章,主要是关于各种框架和它们能把程序员从主要业务编程中抽离出来的功能特征.概括一下他的主要论点,当你成为了一个“Rails程序员”,你使用的是一种易于理解 ...

  8. oracle--clob

    最近,收到这样的异常邮件: Error updating database.  Cause: java.sql.SQLException: ORA-01461: can bind a LONG val ...

  9. 核心概念 —— 服务提供者

    1.简介 服务提供者是Laravel应用启动的中心,你自己的应用以及所有Laravel的核心服务都是通过服务提供者启动. 但是,我们所谓的"启动"指的是什么?通常,这意味着注册事物 ...

  10. java演示facade(外观)模式

    实际应用中,原来的代码涉及多个子系统时,重新进行类的设计,将原来分散在源码中的类结构及方法重新组合,形成新的.统一的接口,供上层应用使用. Facade所面对的往往是多个类或其它程序单元,通过重新组合 ...