简介C#读取XML的方式(转)
在程序中访问进而操作XML文件一般有两种模型,分别是使用DOM(文档对象模型)和流模型,使用DOM的好处在于它允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用XPath查询。
XML作用
对于XML,想必各位都比较了解,我也就不用费笔墨来描述它是什么了,我想在未来的Web开发中XML一定会大放异彩,XML是可扩展标记语言,使用它企业可以制定一套自己的数据格式。用于Internet的数据传输,我想,这是XML对于我们这些程序员最诱人的地方!
我们今天的主题不是论述XML的好处,而是讨论在C#中如何使用XML。下面我们来了解一下使用程序访问XML的一些基础理论知识。
访问的两种模型:
在程序中访问进而操作XML文件一般有两种模型,分别是使用DOM(文档对象模型)和流模型,使用DOM的好处在于它允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用XPath查询,但是,DOM的缺点在于它需要一次性的加载整个文档到内存中,对于大型的文档,这会造成资源问题。流模型很好的解决了这个问题,因为它对XML文件的访问采用的是流的概念,也就是说,任何时候在内存中只有当前节点,但它也有它的不足,它是只读的,仅向前的,不能在文档中执行向后导航操作。虽然是各有千秋,但我们也可以在程序中两者并用实现优劣互补嘛,呵呵
一、DOM文档对象模型操作
using System.Xml;
XmlDocument xml=new XmlDocument();//初始化一个xml实例
xml.Load(path);//导入指定xml文件
xml.Load(HttpContext.Current.Server.MapPath("~/file/bookstore.xml"));XmlNode root=xml.SelectSingleNode("/root");//指定一个节点
XmlNodeList childlist=root.ChildNodes;//获取节点下所有直接子节点
XmlNodeList nodelist=xml.SelectNodes("/Root/News");//获取同名同级节点集合string id=node.Attributes["id"].Value;//获取指定节点的指定属性值
string content=node.InnerText;//获取指定节点中的文本
root.HasChildNodes;//判断该节点下是否有子节点
1.XmlDocument类的属性
XmlDocument类的属性及说明如下表所示。
|
属性 |
说明 |
|
Attributes |
当前节点的属性集合 |
|
BaseURI |
当前节点的基URI |
|
ChildNodes |
节点的所有子节点 |
|
DocumentElement |
文档的根 |
|
DocumentType |
DOCTYPE 声明的节点 |
|
FirstChild |
节点的第一个子节点 |
|
HasChildNodes |
是否有任何子节点 |
|
Implementation |
获取当前文档的 XmlImplementation对象 |
|
InnerText |
节点包含的所有文本内容 |
|
InnerXml |
节点所包含的所有XML内容 |
|
IsReadOnly |
当前节点是否是只读的 |
|
Item |
获取指定的子元素 |
|
LastChild |
最后一个子节点 |
|
LocalName |
获取节点的本地名称 |
|
Name |
获取节点的限定名 |
|
NamespaceURI |
获取该节点的命名空间 URI |
|
NameTable |
获取与此实现关联的 XmlNameTable |
|
NextSibling |
获取紧接在该节点之后的节点 |
|
NodeType |
获取当前节点的类型 |
|
OuterXml |
获取表示此节点及其所有子节点的标记 |
|
OwnerDocument |
获取当前节点所属的 XmlDocument |
|
ParentNode |
获取该节点(对于可以具有父级的节点)的父级 |
|
Prefix |
获取或设置该节点的命名空间前缀 |
|
PreserveWhitespace |
获取或设置一个值,该值指示是否在元素内容中保留空白 |
|
PreviousSibling |
获取紧接在该节点之前的节点 |
|
SchemaInfo |
返回节点的后架构验证信息集 (PSVI) |
|
Schemas |
获取或设置与此 XmlDocument 关联的 XmlSchemaSet 对象 |
|
Value |
获取或设置节点的值 |
|
XmlResolver |
设置 XmlResolver 以用于解析外部资源 |
2.XmlDocument类的方法
XmlDocument类的方法及说明如下表所示。
|
方法 |
说明 |
|
AppendChild |
将指定的节点添加到该节点的子节点列表的末尾 |
|
CreateAttribute |
创建具有指定名称的 XmlAttribute |
|
CreateCDataSection |
创建包含指定数据的 XmlCDataSection |
|
CreateComment |
创建包含指定数据的 XmlComment |
|
CreateDocumentFragment |
创建 XmlDocumentFragment |
|
CreateDocumentType |
返回新的 XmlDocumentType 对象 |
|
CreateElement |
创建 XmlElement |
|
CreateEntityReference |
创建具有指定名称的 XmlEntityReference |
|
CreateNavigator |
创建一个用于导航此文档的新 XPathNavigator 对象 |
|
CreateNode |
创建 XmlNode |
|
CreateProcessingInstruction |
创建一个具有指定名称和数据的 XmlProcessingInstruction |
|
CreateSignificantWhitespace |
创建一个 XmlSignificantWhitespace 节点 |
|
CreateTextNode |
创建具有指定文本的 XmlText |
|
CreateWhitespace |
创建一个 XmlWhitespace 节点 |
|
CreateXmlDeclaration |
创建一个具有指定值的 XmlDeclaration 节点 |
|
GetElementById |
获取具有指定 ID 的 XmlElement |
|
GetElementsByTagName |
返回一个 XmlNodeList ,它包含与指定名称匹配的所有元素的列表 |
|
GetNamespaceOfPrefix |
查找当前节点范围内离给定的前缀最近的 xmlns 声明,并返回声明中的命名空间 URI |
|
GetPrefixOfNamespace |
查找当前节点范围内离给定的命名空间 URI 最近的 xmlns 声明,并返回声明中定义的前缀 |
|
GetType |
获取当前实例的 Type |
|
ImportNode |
将节点从另一个文档导入到当前文档 |
|
InsertAfter |
将指定的节点紧接着插入指定的引用节点之后 |
|
InsertBefore |
将指定的节点紧接着插入指定的引用节点之前 |
|
Load |
加载指定的 XML 数据 |
|
LoadXml |
从指定的字符串加载 XML 文档 |
|
Normalize |
将XmlText 节点都转换成“正常”形式 |
|
PrependChild |
将指定的节点添加到该节点的子节点列表的开头 |
|
ReadNode |
根据 XmlReader 中的信息创建一个 XmlNode 对象。读取器必须定位在节点或属性上 |
|
RemoveAll |
移除当前节点的所有子节点和/或属性 |
|
RemoveChild |
移除指定的子节点 |
|
ReplaceChild |
用新节点替换旧节点 |
|
Save |
将 XML 文档保存到指定的位置 |
|
SelectNodes |
选择匹配XPath 表达式的节点列表 |
|
SelectSingleNode |
选择匹配 XPath 表达式的第一个 XmlNode |
|
Supports |
测试 DOM 实现是否实现特定的功能 |
|
Validate |
验证 XmlDocument 是不是 Schemas 属性中包含的 XML 架构定义语言 (XSD) 架构。 |
|
WriteContentTo |
将 XmlDocument 节点的所有子级保存到指定的 XmlWriter 中 |
|
WriteTo |
将 XmlDocument 节点保存到指定的 XmlWriter |
下面对常用的方法进行介绍。
(1)Load方法
该方法可以从一个字符串指定的XML文件或是一个流对象、一个TextReader对象、一个XmlReader对象导入XML数据。
(2)LoadXml方法
该方法完成从一个特定的XML文件导入XML数据的功能。默认情况下,LoadXml 方法既不保留空白,也不保留有意义的空白。此方法不执行 DTD 或架构验证。
(3)Save方法
该方法将XML数据保存到一个XML文件或是一个流对象、一个TextReader对象、一个XmlReader对象导入XML数据。
3.XmlDocument类的事件
XmlDocument类的事件及说明如下表所示。
表 XmlDocument类的事件及说明
|
事件 |
说明 |
|
NodeChanged |
当属于该文档的节点的 Value已被更改时发生 |
|
NodeChanging |
当属于该文档的节点的 Value 将被更改时发生 |
|
NodeInserted |
当属于该文档的节点已被插入另一个节点时发生 |
|
NodeInserting |
当属于该文档的节点将被插入另一个节点时发生 |
|
NodeRemoved |
当属于该文档的节点已被从其父级移除时发生 |
|
NodeRemoving |
当属于该文档的节点将被从文档中移除时发生 |
http://kb.cnblogs.com/page/42226/
简介C#读取XML的方式(转)的更多相关文章
- 简介C#读取XML的两种方式
简介C#读取XML的两种方式 作者: 字体:[增加 减小] 类型:转载 时间:2013-03-03 在程序中访问进而操作XML文件一般有两种模型,分别是使用DOM(文档对象模型)和流模型,使用DOM的 ...
- cocos2dx中调用TinyXml读取xml配置文件 || cocos2d-x 中跨平台tinyxml读取xml文件方式
TiXmlDocument *doc = newTiXmlDocument; #if (CC_TARGET_PLATFORM ==CC_PLATFORM_ANDROID) //Android平台tin ...
- java读取XML文件的四种方式
java读取XML文件的四种方式 Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT& ...
- C#读取XML方式
前言 前一篇我们简单给大家做了XML的介绍,现在咱们继续这个系列 XML文件是一种常用的文件格式,例如WinForm里面的app.config以及Web程序中的web.config文件,还有许多重要的 ...
- 通过w3c方式 读取xml内容
/** * 通过w3c方式 读取xml内容 * @param lablenames 要读取的节点名称 * @param file_path_name 文件绝对路径 * @return */ publi ...
- 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂
浅谈JS中的!=.== .!==.===的用法和区别 var num = 1; var str = '1'; var test = 1; test == num //tr ...
- Spring3.2 中 Bean 定义之基于 XML 配置方式的源码解析
Spring3.2 中 Bean 定义之基于 XML 配置方式的源码解析 本文简要介绍了基于 Spring 的 web project 的启动流程,详细分析了 Spring 框架将开发人员基于 XML ...
- C#中常用的读取xml的几种方法(转)
本文完全来源于http://blog.csdn.net/tiemufeng1122/article/details/6723764,仅作个人学习之用. XML文件是一种常用的文件格式,例如WinFor ...
- 在C#中创建和读取XML文件
1.创建简单的XML文件 为了便于测试,我们首先创建控制台应用程序,项目命名为CreateXml,Program.cs代码如下: 这样会在C盘根目录下创建data2.xml文件,文件内容为 using ...
随机推荐
- elipse使用,Java和Javaee模式区别
Java带有用户界面的基本ide,缺少数据库和web开发工具 IDE(Integrated Development Environment,集成开发环境).集成开发环境(简称IDE)软件是用于程序开发 ...
- Mac使用
安装you-get: 用到mac下安装软件的工具:brew 百度搜brew到官网首页照说明在终端执行一段指令 安装方法:命令行输入 /usr/bin/ruby -e "$(curl -fsS ...
- 图片万能居中css
.div{text-align:center;} .div img{vertical-align:middle;} .div:after{content:"";display:in ...
- 思科模拟器-DHCP配置
一.如图做好以下拓扑图(下图我取消显示端口号) 二.配置最下面的四台上网终端为自动获取ip 三.配置中间的二层交换机:添加vlan,同时所有端口设为access类型并将其加入vlan中,以下以swit ...
- IntelliJ IDEA自动导入包去除星号(import xxx.*)
打开设置>Editor>Code Style>Java>Scheme Default>Imports ① 将Class count to use import with ...
- Django的安装和启动以及第一个工程的建立
---恢复内容开始--- 前提:已经安装了python和Anaconda (windows系统) 在Anaconda安装好之后,其文件夹下有一个叫做Anaconda Prompt的工具,类似windo ...
- JIRA的邮件通知
提交测试或提交上线申请时发送给相关的开发人员.测试人员.运维人员. 使用插件Notification
- 从创业者角度看《印度合伙人 Padman》后的一点感受
最近对印度电影颇有兴趣,周末在家看了<印度合伙人 Padman>.本文试着从一名创业者视角,谈谈个人的一点看法. 0.故事简介 引用自 https://movie.douban.com/s ...
- PPIO 分布式存储在数据分发上有哪些优势?
PPIO 是为开发者打造的去中心化存储与分发平台,让数据存储更便宜.更高速.更隐私.官方网站是 pp.io.PPIO 不仅仅是个存储平台,也是一个分发平台.之前我们写了许多文章介绍 PPIO 的存储 ...
- Unity 缓冲池概念
在Unity 中碰到一些重复使用的游戏物体时,我们可以使用缓冲池来进行操作,即重复利用