zoukankan      html  css  js  c++  java
  • 操作xml文档的常用方式

    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; 
    }

      

  • 相关阅读:
    IT综合学习网站收集
    使用CSS实现表格细边框的三种方式
    安装Ionic遇到的问题
    未能解析此远程名称:'nuget.org' 的解决方法
    webapi 安全验证与权限验证
    iOS模拟器可以编译,真机无法编译
    Mac上安装FFmpeg命令行
    写在工作三周年
    MPMoviePlayerController概述
    NSStream概述
  • 原文地址:https://www.cnblogs.com/simpleZone/p/3431879.html
Copyright © 2011-2022 走看看