简介C#读取XML的两种方式

作者: 字体:[增加 减小] 类型:转载 时间:2013-03-03
在程序中访问进而操作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的两种方式的更多相关文章

  1. sparkStreaming读取kafka的两种方式

    概述 Spark Streaming 支持多种实时输入源数据的读取,其中包括Kafka.flume.socket流等等.除了Kafka以外的实时输入源,由于我们的业务场景没有涉及,在此将不会讨论.本篇 ...

  2. web项目生成web.xml的两种方式

    做了很多的项目,今天着手写个小demo发现做web项目的时候还需要从别的地方去拷贝,那么如果没有地方可以拷贝,要怎么办呢?下边介绍三种方式生成web.xml文件. 一.maven项目情况:(STS版) ...

  3. 关于spring读取配置文件的两种方式

    很多时候我们把需要随时调整的参数需要放在配置文件中单独进行读取,这就是软编码,相对于硬编码,软编码可以避免频繁修改类文件,频繁编译,必要时只需要用文本编辑器打开配置文件更改参数就行.但没有使用框架之前 ...

  4. php 读xml的两种方式

    <?xml version="1.0" encoding="ISO-8859-1"?> <st> <stu> <nam ...

  5. C#编程:从控制台读取数字的两种方式

    有时需要从控制台输入数字,就用到前面介绍的内容,数据转换,如:int num=int.Pares(Console.ReadLine()); int num=Convert.ToInt32(Consol ...

  6. go读取键盘输入两种方式

    一种scanf var x intfmt.Println("input a int number")fmt.Scan(&x)fmt.Printf("读取到内容:% ...

  7. hadoop 读取文件的两种方式

    1.操作javaAPI方式 static{ URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory()); } public stat ...

  8. 关于读取mapper的两种方式

    第一种: 第二种:

  9. 使用 EasyExcel 读取Excel(两种方式)

    引入 jar 包 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel&l ...

随机推荐

  1. OGNL_一点

    ognl此表达式语言,是一门什么样的语言呢?下面然我为大家简单的讲解一点小小的关于它的内容吧! 然我来简单得解释说:OGNL(Object-Graph Navigation Language),可以方 ...

  2. Hibernate的关联映射——单向1-N关联

    Hibernate的关联映射--单向1-N关联 单向1-N关联的持久化类里需要使用集合属性.因为1的一端需要访问N的一端,而N的一端将以集合(Set)形式表现.从这个意义上来看,1-N(实际上还包括N ...

  3. 10-JS数组

    数组的定义和创建 数组是值得有序集合.JavaScript数组是无类型的. 数组对象的作用是:使用单独的变量名来存储一系列的值. 数组的创建 有两种向数组赋值的方法(你可以添加任意多的值,就像你可以定 ...

  4. C# Reportviewer 固定表头

    RDLC报表固定每页都显示表头以XML方式打开rdlc文件查找到<TablixRowHierarchy> <TablixMembers> <TablixMember> ...

  5. JS部分代码分享

    2015-10-12 : 1.search()表达式:搜索索引 <!DOCTYPE html><html><body> <p>搜索字符串 "w ...

  6. 阻抗计算公式、polar si9000(教程)

    给初学者的一直有很多人问我阻抗怎么计算的. 人家问多了,我想给大家整理个材料,于己于人都是个方便.如果大家还有什么问题或者文档有什么错误,欢迎讨论与指教!在计算阻抗之前,我想很有必要理解这儿阻抗的意义 ...

  7. 正则表达式获取TABLE里的内容

    //过滤\n 转换成空            String withoutNString=message.Replace("\n", "");          ...

  8. linux&win7双系统安装

    linux&win7双系统安装 硬盘大小分配方案 按照顺序来建立分区 /swap    4G     ==即交换分区,也是一种文件系统,它的作用是作为Linux的虚拟内存.在Windows下, ...

  9. MFC编程入门之十七(对话框:文件对话框)

    上一讲介绍的是消息对话框,本节讲解文件对话框.文件对话框也是很常用的一类对话框. 文件对话框的分类 文件对话框分为打开文件对话框和保存文件对话框,相信大家在Windows系统中经常见到这两种文件对话框 ...

  10. LINUX CP 跳过询问是否覆盖

    有两个方法可以解决此问题: 1..bashrc里面注释掉 Alias cp='cp -i' 2.使用 \cp 命令(在cp前加一个'\')