xml编辑 html_【c# .net】Xml读写操作(XmlTextReader 类)

Xml读写操作(XmlTextReader 类)

1.XML简介

1)XML 和 HTML 的设计初衷

  • XML 被设计用来传输和存储数据
  • HTML 被设计用来显示数据

2)什么是 XML?

  • XML 指可扩展标记语言(EXtensible Markup Language)
  • XML 是一种标记语言,很类似 HTML
  • XML 的设计宗旨是传输数据,而非显示数据
  • XML 标签没有被预定义。您需要自行定义标签
  • XML 被设计为具有自我描述性
  • XML 是 W3C 的推荐标准

3)XML 与 HTML 的主要差异

  • XML 不是 HTML 的替代
  • XML 和 HTML 为不同的目的而设计:
  • XML 被设计为传输和存储数据,其焦点是数据的内容
  • HTML 被设计用来显示数据,其焦点是数据的外观
  • HTML 旨在显示信息,而 XML 旨在传输信息

4)关于节点 (非常重要)

根据 DOM,XML 文档中的每个成分都是一个节点。

  • 整个文档是一个文档节点
  • 每个 XML 标签是一个元素节点
  • 包含在 XML 元素中的文本是文本节点
  • 每一个 XML 属性是一个属性节点
  • 注释属于注释节点

c5a27836f027eef4503cc4b3cc7bc773.png

2.访问XML文件的两个基本模型

1)DOM模型:使用DOM的好处在于它允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用XPath查询,但是,DOM的缺点在于它需要一次性加载整个文档到内存中,对于大型的文档,这会造成资源问题。

2)流模型:流模型很好的解决了这个问题,因为它对XML文件的访问采用的是流的概念,也就是说,任何时候在内存中只有当前节点,但它也有它的不足,它是只读的,仅向前的,不能在文档中执行向后导航操作。虽然是各有千秋,但我们也可以在程序中两者并用实现优劣互补。


3.C#在System.XML 名称空间中包含以下几个用于XML的类

XMLTextReader------提供以快速、单向、无缓冲的方式存取XML数据。(单向意味着你只能从前往后读取XML文件,而不能逆向读取)

XMLValidatingReader------与XMLTextReader类一起使用,提供验证DTD、XDR和XSD架构的能力。

XMLDocument------遵循W3C文档对象模型规范的一级和二级标准,实现XML数据随机的、有缓存的存取。一级水平包含了DOM的最基本的部分,而二级水平增加多种改进,包括增加了对名称空间和级连状图表(CSS)的支持。

XMLTextWriter------生成遵循 W3C XML 1.0 规范的XML文件。


4. XMLTextReader 类简介

C# XMLTextReader 这个类设计的目的就是从XML文件中快速的读取数据,而对系统资源(主要包括内存和处理器时间)不做很高的要求。

如果是需要对 XML 进行多样性的随机访问,编辑操作则使用 XMLDocument,该类具有极强的灵活性。


5.特性

1)单向只读,无缓冲,且不可逆。

2)读取完毕需要手动关闭流释放资源。


XMLTextReader 类的方法和属性

1.XMLTextReader 类的一些常用的属性

属性 描述
WhitespaceHandling WhitespaceHandling { get; set; } 获取或设置一个值,该值指定如何处理空白区域
string? BaseURI { get; } 获取当前节点的地址
string NamespaceURI { get; } 获取读取器定位在的节点的命名空间 URI
Encoding? Encoding { get; } 获取文档的编码
int Depth { get; } 获取XML文档中当前节点的深度
int LineNumber { get; } 获取当前行号
int LinePosition { get; } 获取当前行位置
bool EOF { get; } 判断读取器是否定位在流结尾
XmlNodeType NodeType { get; } 获取当前节点的类型
string Value { get; } 获取当前节点的文本值
bool IsEmptyElement { get; } 判断当前节点是否为空元素
bool Normalization { get; set; } 判断是否规范化空白区域和属性值
string LocalName { get; } 获取当前节点的本地名称
string Name { get; } 获取当前节点的限定名称
string item[int]{ get; } 获取指定索引处属性的值
string item[string, string]{ get; } 获取具有指定LocalName和NamespaceURI的属性的值
string item[string]{ get; } 获取具有指定Name的属性的值
bool HasAttributes { get; } 判断当前节点是否有任何属性
int AttributeCount { get; } 获取当前节点上的属性数目
string Prefix { get; } 获取与当前节点关联的命名空间前缀
char QuoteChar { get; } 获取用于括起属性节点的值的引号字符
ReadState ReadState { get; } 获取读取器的状态
XmlReaderSettings? Settings { get; } 获取用于创建此XmlReader实例的XmlReaderSettings对象
Type ValueType { get; } 获取当前节点的公共语言运行时类型
string XmlLang { get; } 获取当前 xml:lang 范围
XmlSpace XmlSpace { get; } 获取当前 xml:space 范围
bool HasValue { get; } 判断当前节点是否可以具有 String.Empty 以外的 Value
bool Namespaces { get; set; } 获取或设置是否进行命名空间支持
bool CanReadBinaryContent { get; } 判断节点是否实现二进制内容读取方法
bool CanReadValueChunk { get; } 判断节点是否实现 ReadValueChunk(Char[], Int32, Int32) 方法
bool CanResolveEntity { get; } 判断读取器是否可以分析和解析实体
EntityHandling EntityHandling { get; set; } 获取或设置一个值,该值指定读取器处理实体的方式
XmlNameTable NameTable { get; } 获取与此实现关联的 XmlNameTable

2.XMLTextReader 类的一些常用的方法

方法 属性
void Close(); 关闭流,并释放资源
void Dispose(); 释放当前使用的所有资源
TextReader GetRemainder(); 获取当前节点外XML的剩余部分,返回TextReader
bool Read(); 从流中读取下一个节点,调用一次就只会读取一次
XmlNodeType MoveToContent(); 跳过 非内容节点 至下一个 内容节点
bool IsStartElement(string name); 跳过非内容节点,判断当前节点是否为指定元素的开始节点
void ReadStartElement(); 跳过Element节点至下一个节点
void ReadStartElement(string name); 跳过 指定元素开始节点 至下一个节点
void ReadEndElement(); 跳过EndElement节点至下一个节点
bool ReadToDescendant(string name); 跳到第一个具有指定限定名的子代元素
bool ReadToFollowing(string name); 一直读取,直到找到所有具有指定限定名的元素
bool ReadToNextSibling(string name); 一直读取,前进到下一个具有指定限定名的同级元素
void ResetState(); 将读取器的状态重置为 ReadState.Initial
string GetAttribute(int i); 获取具有指定索引的属性的值
string GetAttribute(string name); 获取具有指定属性名称的属性值
IDictionary GetNamespacesInScope(XmlNamespaceScope scope); 获取一个集合,该集合包含当前在范围内的所有命名空间
void MoveToAttribute(int i); 移动到具有指定索引的属性
bool MoveToAttribute(string name); 移动到具有指定名称的属性
bool MoveToElement(); 判断指针是否移动到属性节
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值