简介C#读取XML的两种方式
简介C#读取XML的两种方式
XML作用
对于XML,想必各位都比较了解,我也就不用费笔墨来描述它是什么了,我想在未来的Web开发中XML一定会大放异彩,XML是可扩展标记语言,使用它企 业可以制定一套自己的数据格式。用于Internet的数据传输,我想,这是XML对于我们这些程序员最诱人的地方!
我们今天的主题不是论述XML的好处,而是讨论在C#中如何使用XML。下面我们来了解一下使用程序访问XML的一些基础理论知识。
访问的两种模型:
在程序中访问进而操作XML文件一般有两种模型,分别是使用DOM(文档对象模型)和流模型,使用DOM的好处在于它允许编辑和更新XML文档,可以随机 访问文档中的数据,可以使用XPath查询,但是,DOM的缺点在于它需要一次性的加载整个文档到内存中,对于大型的文档,这会造成资源问题。流模型很好 的解决了这个问题,因为它对XML文件的访问采用的是流的概念,也就是说,任何时候在内存中只有当前节点,但它也有它的不足,它是只读的,仅向前的,不能 在文档中执行向后导航操作。虽然是各有千秋,但我们也可以在程序中两者并用实现优劣互补嘛,呵呵
一、DOM文档对象模型操作
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的两种方式的更多相关文章
- sparkStreaming读取kafka的两种方式
概述 Spark Streaming 支持多种实时输入源数据的读取,其中包括Kafka.flume.socket流等等.除了Kafka以外的实时输入源,由于我们的业务场景没有涉及,在此将不会讨论.本篇 ...
- web项目生成web.xml的两种方式
做了很多的项目,今天着手写个小demo发现做web项目的时候还需要从别的地方去拷贝,那么如果没有地方可以拷贝,要怎么办呢?下边介绍三种方式生成web.xml文件. 一.maven项目情况:(STS版) ...
- 关于spring读取配置文件的两种方式
很多时候我们把需要随时调整的参数需要放在配置文件中单独进行读取,这就是软编码,相对于硬编码,软编码可以避免频繁修改类文件,频繁编译,必要时只需要用文本编辑器打开配置文件更改参数就行.但没有使用框架之前 ...
- php 读xml的两种方式
<?xml version="1.0" encoding="ISO-8859-1"?> <st> <stu> <nam ...
- C#编程:从控制台读取数字的两种方式
有时需要从控制台输入数字,就用到前面介绍的内容,数据转换,如:int num=int.Pares(Console.ReadLine()); int num=Convert.ToInt32(Consol ...
- go读取键盘输入两种方式
一种scanf var x intfmt.Println("input a int number")fmt.Scan(&x)fmt.Printf("读取到内容:% ...
- hadoop 读取文件的两种方式
1.操作javaAPI方式 static{ URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory()); } public stat ...
- 关于读取mapper的两种方式
第一种: 第二种:
- 使用 EasyExcel 读取Excel(两种方式)
引入 jar 包 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel&l ...
随机推荐
- [问题2015S09] 复旦高等代数 II(14级)每周一题(第十教学周)
[问题2015S09] 设 \(A,B\) 是 \(n\) 阶复矩阵, 满足 \(\mathrm{rank}(AB-BA)\leq 1\), 证明: \(A,B\) 可同时上三角化. 问题解答请在以 ...
- httpd服务安装
1.配置yum ps:详见YUM源设置篇 2输入yum install httpd -y 进行安装 3安装完成后,重启httpd服务 service httpd restart ...
- 不用安装Oracle_Client就能使用PLSQL_Developer
1. 下载oracle的客户端程序包(30M) 只需要在Oracle官方网站下载一个叫Instant Client Package的软件就可以了,这个软件不需要安装,只要解压就可以用了,很 ...
- Zip it
https://www.codewars.com/kata/zip-it/train/csharp using System; using System.Collections.Generic; us ...
- iOS - Git 代码版本管理
1.Git Git 是用 C 语言开发的分布版本控制系统.版本控制系统可以保留一个文件集合的历史记录,并能回滚文件集合到另一个状态(历史记录状态).另一个状态可以是不同的文件,也可以是不同的文件内容. ...
- 跨站脚本 XSS<一:防御方法>
1. 过滤特殊字符 避免XSS的方法之一主要是将用户所提供的内容进行过滤,许多语言都有提供对HTML的过滤: PHP的htmlentities()或是htmlspecialchars(). Pytho ...
- 使用window.print实现网页打印
Window.print()方法用于在浏览器中打印当前窗口的内容,如果想要打印当前窗口中指定部分的内容的话需要其他的一些特殊的处理; Demo: <html> <head> & ...
- Php数据类型之整型详解
php中支持的数据类型 在php中主要支持8种数据类型.和3中伪类型的一个形式.8种数据类型分为以下三3大类,第一个就是我们的标量类型,标量类型它只能存储单一数据,那第二大类就是我们的复合类型,第三个 ...
- FROM_UNIXTIME()和UNIX_TIMESTAMP()函数的区别
Unix时间戳(Unix timestamp),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数. 在MySQL中如何格式化时间戳?在mysql中因为t ...
- WCF初探-7:WCF服务配置工具使用
在上一篇WCF服务配置中,文章讲解了WCF的配置所需要的基本节点和属性构造,但是对于初学者的我们在编写程序的时候,往往对这些节点的位置和属性不是特别清楚,所以就导致我们的因配置文件错误而不能运行服务程 ...