操作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;
}
操作xml文档的常用方式的更多相关文章
- 操作XML文档遇到的XMLNS问题及解决方法 (C# 和 PHP)
原文:操作XML文档遇到的XMLNS问题及解决方法 (C# 和 PHP) 不管是用 PHP 还是 C#, 在操作 XML 的时候我们除了一个节点一个节点去取值之外, 还有一个非常方便的表达式, 就是 ...
- 文档对象模型操作xml文档
简介 :文档对象模型(DOM)是一种用于处理xml文档的API函数集. 2.1文档对象模型概述 按照W3C的定义,DOM是“一种允许程序或脚本动态地访问更新文档内容,结构和样式的.独立于平台和语言的规 ...
- C# 操作XML文档 使用XmlDocument类方法
W3C制定了XML DOM标准.很多编程语言中多提供了支持W3C XML DOM标准的API.我在之前的文章中介绍过如何使用Javascript对XML文档进行加载与查询.在本文中,我来介绍一下.Ne ...
- 用ORM的思想操作XML文档,一个对象就搞定不要太简单。滚蛋吧!XmlDocument、XmlNode、Xml***……
大家有没有这样的感受,一涉及XML文档操作就得百度一遍.是不是非!常!烦!.各种类型,各种方法,更别提为了找到一个节点多费劲.本来想写个XML操作的工具方法,写了两行一想既然XML文档是有规律的,如果 ...
- C#操作XML文档---基础
增查改删代码如下 public void CreateXML() { XmlDocument xml = new XmlDocument(); xml.AppendChild(xml.CreateXm ...
- C#XmlHelper操作Xml文档的帮助类
using System.Xml; using System.Data; namespace DotNet.Utilities { /// <summary> /// Xml的操作公共类 ...
- XPath操作XML文档
NET框架下的Sytem.Xml.XPath命名空间提供了一系列的类,允许应用XPath数据模式查询和展示XML文档数据. 3.1XPath介绍 主要的目的是在xml1.0和1.1文档节点树种定位节点 ...
- [XML] C# XmlHelper操作Xml文档的帮助类 (转载)
点击下载 XmlHelper.rar 主要功能如下所示 /// <summary> /// 类说明:XmlHelper /// 编 码 人:苏飞 /// 联系方式:361983679 // ...
- C#操作XML文档(XmlDocument、XmlNode、XmlAttribute、SelectSingleNode、SelectNodes、XmlNodeList)
XML文档是一种通用的文档,这种文档既可以用.config作为后缀也可以用.xml作为后缀.XML文档主要由元素节点和节点的属性共同构成的.它有且仅有一个根节点,其他的节点全部都是根节点的子节点或者子 ...
随机推荐
- Linux下php安装phpredis
说明:php安装目录:/usr/local/php5php.ini配置文件路径:/usr/local/php5/etc/php.iniNginx安装目录:/usr/local/nginxNginx网站 ...
- Cookie和Session(session过程和设置进程外session)
cookie 和 session 的区别 cookie 是保存在客户端上的一种机制 而session 是保存在服务端的一种机制 cookie的理解: 打个简单的比方,一个人生病了去A医院看病,回 ...
- python打印详细的异常信息
#!/usr/bin/env python #coding=utf-8 import traceback try: 1/0 except Exception, e: print e print tra ...
- Android(java)学习笔记112:局部位置的内部类的介绍
1.局部内部类 /* 局部内部类 A:可以直接访问外部类的成员 B:在局部位置,可以创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能 面试题: 局部内部类访问局部变量的注意事项? A:局部 ...
- Linux 学习之路:read,array,declare
一.read 键盘读取变量 用法:read -p "PLS keyin your name:" -t 60 name -p :后面接提示符,-t 后面接可以等待的时间,其中nam ...
- [改善Java代码]强制声明泛型的实际类型
Arrays工具类有一个方法asList可以把一个变长参数或数组变成列表,但是它有一个缺点:它所生成的List长度是不可改变的,而这在我们的项目开发中很不方便. import java.util.Ar ...
- 使用Mat分析大堆信息
在定位一线问题时经常碰测试中出现Out Of Memory的问题, 通过jmap查看,发现JVM heap全用满了.有很多工具可以查看JVM堆的信息, 收费的比如JProfiler, YourKit, ...
- TCP基础知识
TCP/IP网络协议栈分为应用层(Application).传输层(Transport).网络层(Network)和链路层(Link)四层.如下图所示 两台计算机通过TCP/IP协议通讯的过程如下所示 ...
- Spring(3.2.3) - Beans(2): 属性注入 & 构造注入
依赖注入是指程序运行过程中们如果需要另外的对象协作(访问它的属性或调用它的方法)时,无须在代码中创建被调用者,而是依赖于外部容器的注入. 属性注入(Setter Injection) 属性注入是指 I ...
- Git CMD - branch: List, create, or delete branches
命令格式 git branch [--color[=<when>] | --no-color] [-r | -a] [--list] [-v [--abbrev=<length> ...