.net学习笔记---xml操作及读写

一、XML文件操作中与.Net中对应的类

  微软的.NET框架在System.xml命名空间提供了一系列的类用于Dom的实现。

  以下给出XML文档的组成部分对应.NET中的类:

XML文档组成部分 对应.net中的类
处理指令 XmlProcessingInstruction
专指元素节点 XmlElement
属性 XmlAttribute
文本节点 XmlText
节点 XmlNode
文档 XmlDocument
XmlWriter 对象的特性 XmlWriterSettings
注释 XmlComment

二、Xml文档各种处理类

  1、XmlNode节点类:包括元素节点、文本节点、属性节点等等。

  这个类可以说是.Net Xml操作的根基,大部分Xml操作类都继承自此类。很多类都重写了该类的方法等。

  这个类成员属性,方法都很多,但是都是非常简单的,无非是对Xml文档的添加,修改,查询,保存等操作。因此,直接通过看MSDN就足够:

  XmlNode:http://msdn.microsoft.com/zh-cn/library/system.xml.xmlnode_members(v=vs.80).aspx

  另外,基本上,所有类都继承于此类,都大同小异。

  2、XmlElement继承了XmlNode,专指元素节点。

  XmlElement的特点:

  • XmlElement继承自XmlLinkedNode又继承自XmlNode类。
  • XmlElement专指元素节点,Xml节点有多种类型:属性节点、注释节点、文本节点、元素节点等。也就是XmlNode是这多种节点的统称。
  • XmlElement是具现类,可以直接实例化,而XmlNode是抽象类,必须通过XmlDocument的某些方法返回。

  本处仅仅写个最简单的示例:

  示例Xml文档:

<?xml version="1.0" encoding="gb2312" ?>
<Article>
  <author age="30">张三</author>
  <length>12000</length>
  <price>42</price>
</Article>

  简单示例:

        static void Main(string[] args)
        {
            //XmlDocument
            XmlDocument doc = new XmlDocument();
            doc.Load(@"D:\Articles.xml");

            //XmlNode出场
            XmlNode node = doc.SelectSingleNode("Article");
            string author = node.FirstChild.InnerText;
            Console.WriteLine(author);  //输出 张三

            //XmlElement出场
            XmlElement element = doc.DocumentElement;   //根元素节点
            Console.WriteLine(element.Name);

            //XmlAttribute出场
            XmlAttribute attribute = element.FirstChild.Attributes[0];  //输出30
            Console.WriteLine(attribute.Value);

            //XmlComment出场
            XmlComment comment = doc.CreateComment("这是字数!");
            element.PrependChild(comment);

            doc.Save(@"D:\123123.xml");

            Console.ReadKey();
        }

一、XmlReader的使用

  XmlReader类专门用于读取Xml文件,最大的特点在于支持Settings。

属性 说明
AttributeCount 当在派生类中被重写时,获取当前节点上的属性数
BaseURI 当在派生类中被重写时,获取当前节点的基 URI
CanReadBinaryContent 获取一个值,该值指示 XmlReader 是否实现二进制内容读取方法
Depth 获取 XML 文档中当前节点的深度
EOF 获取一个值,该值指示此读取器是否定位在流的结尾
HasAttributes 获取一个值,该值指示当前节点是否有任何属性
HasValue 获取一个值,该值指示当前节点是否可以具有 Value
IsDefault 获取一个值,该值指示当前节点是否是从 DTD 或架构中定义的默认值生成的特性
IsEmptyElement  获取一个值,该值指示当前节点是否为空元素(例如 <MyElement/>)
Item 获取具有指定索引的属性的值,支持整形,字符串,LocalName 和 NamespaceURI作为参数
LocalName 获取当前节点的本地名称
Name 获取当前节点的限定名
NamespaceURI 获取读取器定位在其上的节点的命名空间 URI
NameTable 获取与该实现关联的 XmlNameTable
NodeType 获取当前节点的类型
Prefix 获取与当前节点关联的命名空间前缀
QuoteChar 获取用于括住特性节点值的引号字符
ReadState 获取读取器的状态
SchemaInfo 获取作为架构验证结果分配给当前节点的架构信息
Settings 获取用于创建此 XmlReader 实例的 XmlReaderSettings 对象
Value 获取当前节点的文本值
ValueType 获取当前节点的公共语言运行时 (CLR) 类型
XmlLang 获取当前的 xml:lang 范围
XmlSpace 获取当前的 xml:space 范围

  常用方法:

方法 说明
Close 将 ReadState 更改为 Closed
Create 使用指定的参数类型创建一个新的 XmlReader 实例
Dispose 释放由 XmlReader 类的当前实例占用的所有资源
GetAttribute 当在派生类中被重写时,获取具有指定索引的属性的值
GetValueAsync 异步获取当前节点的值
IsName 返回一个值,该值指示字符串参数是否是有效的 XML 名称
IsNameToken 返回一个值,该值指示该字符串参数是否是有效的 XML 名称标记
IsStartElement 调用 MoveToContent 并测试当前内容节点是否是开始标记或空元素标记
LookupNamespace 在当前元素的范围内解析命名空间前缀
MoveToAttribute 移动到具有指定索引的属性
MoveToContent
如果此节点不是内容节点,则读取器向前跳至下一个内容节点或文件结尾。
它跳过以下类型的节点:ProcessingInstruction、DocumentType、Comment、Whitespace 或 SignificantWhitespace

MoveToElement 移动到包含当前属性节点的元素
MoveToFirstAttribute 移动到第一个属性
MoveToNextAttribute 移动到下一个属性
Read 从流中读取下一个节点
ReadAttributeValue 将属性值解析为一个或多个 Text、EntityReference 或 EndEntity 节点
ReadContentAs 将内容作为指定类型的对象读取
ReadStartElement 检查当前节点是否为元素并将读取器推进到下一个节点
ReadElementContentAs 将元素内容作为请求类型读取
ReadElementString 读取纯文本元素
ReadEndElement  检查当前内容节点是否为结束标记并将读取器推进到下一个节点
ReadInnerXml 将所有内容(包括标记)当做字符串读取
ReadOuterXml  读取表示该节点和所有它的子级的内容(包括标记)
ReadString 将元素或文本节点的内容当做字符串读取
ReadSubtree 此实例可用于读取当前节点及其所有子节点
ReadToDescendant 让 XmlReader 前进到下一个具有指定限定名的子代元素
ReadToFollowing 一直读取,直到找到具有指定限定名的元素
ReadToNextSibling 让 XmlReader 前进到下一个具有指定限定名的同级元素
ReadValueChunk 读取嵌入在 XML 文档中的大量文本流
ResolveEntity 解析 EntityReference 节点的实体引用
Skip 跳过当前节点的子级

  示例:

    class Program
    {
        static void Main(string[] args)
        {
            //<?xml version="1.0" encoding="utf-8"?>
            //<Persons>
            //  <Person>
            //    <Name>刘备</Name>
            //    <Age>28</Age>
            //  </Person>
            //</Persons>

            XmlReader reader = XmlReader.Create(@"D:\123.xml");
            reader.ReadString();
            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Element)
                {
                    if (reader.Name == "Name")
                    {
                        Console.WriteLine(reader.ReadElementString());  //刘备
                        Console.WriteLine(reader.HasAttributes);    //false
                    }
                }
            }

            Console.ReadKey();
        }
    }

  大多数方法和属性的使用方法都和上面的例子相似,不在啰嗦。下面来说说,XmlReader的特色功能,自定义格式,其中最主要用到的是属性Settings。

  示例2:

        static void Main(string[] args)
        {
            //<?xml version="1.0" encoding="utf-8"?>
            //<Persons>
            //  <Person>
            //    <!-- 这是一个牛人 -->
            //    <Name>刘备</Name>
            //    <Age>28</Age>
            //  </Person>
            //</Persons>

            XmlReaderSettings RSetting = new XmlReaderSettings();
            RSetting.IgnoreComments = false;    //如果设置为true则忽略所有注释

            XmlReader reader = XmlReader.Create(@"D:\123.xml", RSetting);
            reader.ReadString();
            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Comment)
                {
                    Console.WriteLine(reader.Value);    //这是一个牛人
                }
            }

            Console.ReadKey();
        }
    }

二、XmlWriter的使用

  常用属性:

属性 说明
Settings 获取用于创建此 XmlWriter 实例的 XmlWriterSettings 对象
WriteState 当在派生类中被重写时,获取编写器的状态
XmlLang 当在派生类中被重写时,获取当前的 xml:lang 范围
XmlSpace 当在派生类中被重写时,获取表示当前 xml:space 范围的 XmlSpace

  常用方法:

方法 说明
Close 当在派生类中被重写时,关闭此流和基础流
Create 使用指定的流创建一个新的 XmlWriter 实例
Dispose 释放由 XmlWriter 类的当前实例占用的所有资源
Flush 将缓冲区中的所有内容刷新到基础流,并同时刷新基础流
LookupPrefix 返回在当前命名空间范围中为该命名空间 URI 定义的最近的前缀
WriteAttributes 写出在 XmlReader 中当前位置找到的所有属性
WriteAttributeString 写出具有指定的本地名称和值的属性
WriteBase64 将指定的二进制字节编码为 Base64 并写出结果文本
WriteBinHex 将指定的二进制字节编码为 BinHex 并写出结果文本
WriteCData 写出包含指定文本的 <![CDATA[...]]> 块
WriteCharEntity 为指定的 Unicode 字符值强制生成字符实体
WriteChars 以每次一个缓冲区的方式写入文本
WriteComment 写出包含指定文本的注释 <!--...-->
WriteDocType 写出具有指定名称和可选属性的 DOCTYPE 声明
WriteElementString 编写具有指定的本地名称和值的元素
WriteEndAttribute 关闭上一个 WriteStartAttribute 调用
WriteStartDocument 编写版本为"1.0"的 XML 声明
WriteEndDocument 关闭任何打开的元素或属性并将编写器重新设置为 Start 状态
WriteStartElemen 写入指定的开始标记并将其与给定的命名空间和前缀关联起来
WriteEndElement 关闭一个元素并弹出相应的命名空间范围
WriteEntityRef 按 &name; 写出实体引用
WriteFullEndElement 关闭一个元素并弹出相应的命名空间范围
WriteName 写出指定的名称,确保它是符合 W3C XML 1.0 建议
WriteNmToken 写出指定的名称,确保它是符合 W3C XML 1.0 建议
WriteNode 将所有内容从读取器复制到编写器并将读取器移动到下一个同级的
WriteProcessingInstruction 写出在名称和文本之间带有空格的处理指令
WriteQualifiedName 写出命名空间限定的名称。 此方法查找位于给定命名空间范围内的前缀
WriteRaw 从字符串手动编写原始标记
WriteStartAttribute 用指定的本地名称编写属性的起点
WriteString 编写给定的文本内容
WriteSurrogateCharEntity 为代理项字符对生成并编写代理项字符实体
WriteValue 编写一个参数中指定的类型的值
WriteWhitespace 写出给定的空白

  示例:

        static void Main(string[] args)
        {
            //<?xml version="1.0" encoding="utf-8" standalone="yes"?><Persons><Person><Name>刘备</Name><Age>28</Age></Person></Persons>

            using (FileStream fs = new FileStream(@"D:\123.xml",FileMode.Create,FileAccess.Write))
            {
                using (XmlWriter xw = XmlWriter.Create(fs))
                {
                    //XML声明
                    xw.WriteStartDocument(true);
                    xw.WriteStartElement("Persons");
                    xw.WriteStartElement("Person");
                    xw.WriteStartElement("Name");
                    xw.WriteString("刘备");
                    xw.WriteEndElement();
                    xw.WriteStartElement("Age");
                    xw.WriteValue(28);
                    xw.WriteEndElement();
                    xw.WriteEndElement();
                    xw.WriteEndElement();
                    xw.WriteEndDocument();
                }
            }
            Console.ReadKey();
        }

  上面的注释就是代码所生成的文档。

  上面生成的XML有些问题,没换行,没法看。而且,如果我想去掉XML声明又怎么搞?

  示例2:

        static void Main(string[] args)
        {
            //<Persons>
            //  <Person>
            //    <Name>刘备</Name>
            //    <Age>28</Age>
            //  </Person>
            //</Persons>

            XmlWriterSettings WSetting = new XmlWriterSettings();
            //去掉XML声明
            WSetting.OmitXmlDeclaration = true;
            WSetting.Indent = true;

            using (FileStream fs = new FileStream(@"D:\123.xml",FileMode.Create,FileAccess.Write))
            {
                using (XmlWriter xw = XmlWriter.Create(fs, WSetting))
                {
                    //XML声明
                    xw.WriteStartElement("Persons");
                    xw.WriteStartElement("Person");
                    xw.WriteStartElement("Name");
                    xw.WriteString("刘备");
                    xw.WriteEndElement();
                    xw.WriteStartElement("Age");
                    xw.WriteValue(28);
                    xw.WriteEndElement();
                    xw.WriteEndElement();
                    xw.WriteEndElement();
                }
            }
            Console.ReadKey();
        }

  这样生成的XML就又缩进又去掉命名空间了,更多的设置在XmlWriterSettings类的实例中设置。

时间: 2024-11-08 10:04:08

.net学习笔记---xml操作及读写的相关文章

Lua学习笔记8:文件读写

lua中文件读写经常在游戏配置中用到,比如客户端的音效音乐开关等. Lua官方API文档:点这里 I/O库为文件操作提供4个主要函数:io.open(),io.read(),io.write和io.close(). io.open(文件路径,打开方式):以指定方式打开一个文件,打开成功返回一个文件句柄,失败返回nil和错误描述. 可以传入以下六种打开方式: "r":读模式(默认): "w":写模式: "a":附加模式: "r+"

Blender学习笔记 | 02 | 操作

Shift 点击不同图层 同时显示多图层物件 z 切换 Solid / Wireframe 视图模式 点选物件后M 移动到图层选项 Ctrl + 鼠标左键拖动 自由全选物件 B 方形区域圈选物件 Tab Object / Edit Mode 切换 T 开 / 关 侧栏 Ctrl + Tab 编辑状态下切换编辑对象 E Extrude Region 推挤区域.以发现为轴线. X 删除物件菜单 Blender学习笔记 | 02 | 操作,布布扣,bubuko.com

python学习笔记5:python读写文件

python学习笔记5:python读写文件 一.文件的打开模式 1.打开文件 1) f=open('D:\\a.txt','w') 第一个参数是文件的路径,如果只写文件的名字,默认是在当前执行目录下的文件:第二个参数是文件的打开模式 这种方式打开文件,在使用完了之后一定要记得,关闭文件: f.close() 2) with open('D:\\a.txt','w') as f 这种方式打开文件,文件在使用完后会自动关闭文件,不需要close  2. 文件的打开模式 总的来说,文件的打开模式有三

memcached学习笔记5--socke操作memcached 缓存系统

使用条件:当我们没有权限或者不能使用服务器的时候,我们需要用socket操作memcached memcached-client操作 特点: 无需开启memcache扩展 使用fsocketopen()套接字连接memcached 同样执行CRUD require_once(CLASS_PATH.'memcached-client.php');//CLASS_PATH 是我定义的类文件文件夹路径 $mc = new memcached( array( 'servers' => array( '1

树莓派学习笔记——SQLite操作简述

0 前言 本文介绍如何在树莓派中利用SQLite数据库保存CPU温度数据.SQLite是一款轻量级零配置数据库,非常适合在树莓派和其他嵌入式系统中使用.SQLite文档详细资料丰富,本文不会详细解释SQLite数据库操作的方方面面,只能结合具体场景按需说明.本文介绍的SQLite技巧也可以在其他平台使用,并不局限于树莓派. 本文继续折腾树莓派温度,需要从中可以玩出新花样. [相关博文] [树莓派学习笔记--索引博文]--更多博文请关注. [树莓派学习笔记--获取树莓派CPU温度] [树莓派学习笔

计算机操作系统学习笔记_1_操作系统概述

操作系统概述 一.操作系统的概念.特征.功能和提供的服务 1.操作系统的概念     操作系统是计算机系统中最重要.最基本的系统软件,操作系统位于硬件和用户程序之间.    对于用户来讲:它能向用户提供使用计算机的接口;    从资源管理角度来看:它能管理计算机软硬件资源,提高其利用率;    再者,利用虚拟机技术(如WMWare,VirtualBox,Java虚拟机等),扩展了计算机的功能和使用范围.     因此,操作系统的定义为:操作系统是控制和管理计算机软.硬件资源,以尽可能合理.高效的

html学习笔记-XML

html学习笔记-XML Table of Contents 1. XML简介 2. XML用途 3. XML树结构 4. XML语法 5. XML元素 6. XML属性 7. XML验证 8. XML浏览器支持 9. 显示XML 1 XML简介 XML指可扩展标记语言,被设计用来传输和存储数据.是独立于软件和硬件的信息传输工具. XML指可扩展标记语言( EXtensible Markup Language ) XML是一种标记语言 ,很类似HTML XML的设计宗旨是传输数据 ,而非显示数据

memcached学习笔记3--telnet操作memcached

方式: 一.telnet访问memcached缓存系统(主要用于教学,不讨论) telnet 127.0.0.1 11211     => telnet IP地址 端口号 //往Memcached中存放数据 add username 0 60 5       => add:添加命令 username:key的名字(是以key/value存放) 0:标示,一般不用管 60:缓存多长时间,超过时间自动删除,单位(秒) s 5: 表示放入的数据大小 注意:如果一个key已经存在,再要添加数据到这个k

WebService学习笔记-XML&Schema&HTTP

XML约束 在XML技术里,可以编写一个文档(文件)来约束一个XML文档的书写规范,这称之为XML约束 1.namespace 相当于schema文件的id 2.targetNamespace属性 用来指定schema文件的namespace的值 3.xmlns属性 引入一个约束, 它的值是一个schema文件的namespace值 4.schemaLocation属性 用来指定引入的schema文件的位置 schema规范中: 1. 所有标签和属性都需要有schema文件来定义 2. 所有的s