System.Xml命名空间与XmlNode类
来源:互联网 发布:淘宝装修素材网站 编辑:程序博客网 时间:2024/05/23 18:10
System.Xml简介
System.Xml命名空间为多种标准的XML文档提供操作支持,这些XML标准包括XML1.0、XML命名空间、XSD架构、XPath表达式、XSLT转换、DOM级别1核心和DOM级别2核心。
System.Xml命名空间包含操作XML文档的类,这些类一方面提供了XML文档标准的对象,另一方面提供了XML文档的特定操作。
System.XML概述
System.Xml命名空间包含XML文档标准对象类,是一组XML文档对象模型,即Document Object Model(简称DOM)。为了能在更多的平台和系统中得到广泛应用,DOM的设计是语言无关性的,因此DOM模型中对所有对象都进行了抽象,以至于“一切都是节点”。这样的设计无疑十分完美。但由此带来的影响也是显而易见的:在实际应用时,实现接口对树形节点的遍历和检索非常复杂。
为此.NET Framework的System.Xml命名空间提供了一组实现DOM接口,以便对XML文档进行便利、快捷的操作。
System.Xml命名空间内的类组成
System.Xml命名空间是以XmlDocument为核心组织起来的,该类与XmlElement类、XmlNode类、XmlAttribute类一起实现DOM的接口。System.Xml命名空间同时提供了XmlReader、XmlWriter类和XmlNavigator类,对XML文档进行读写和导航操作。
表示节点的抽象类:XmlNode类
XmlNode类表示XML文档中的节点。该类是DOM结构实现的基础,由于XmlNode类包含了节点列表,因此能够提供很方便地表示DOM所描述的树状结构。
XmlNode类是一个抽象类。该类在内部实现了DOM结构中的节点所规定的一系列方法和属性。其派生类XmlAttibute类、XmlDocument类、XmlDocumentFragment类、XmlEntity类、XmlLinkedNode类和XmlNotation类都可以被看成是一个节点来进行操作。
因此,XmlNode类的主要功能是使用抽象工厂的设计模式,实现对DOM树形结构的抽象。
语法定义:
public abstract class XmlNode : ICloneable, IEnumerable, IXPathNavigable
XmlNode是抽象类,不能构造实例,但可以使用该类的派生类来创建,下面的代码演示了如何使用XmlNode的派生类XmlDocument来创建XmlNode实例:
XmlNode docnode = new XmlDoument();
方法详解:
Clone:克隆节点
CloneNode:克隆当前节点,该方法与Clone方法的区别在于能使用bool deep参数决定是否克隆当前节点下的所有子节点。
SelectNodes:根据XPath表达式,获得符合条件的节点列表
SelectSingleNode:根据XPath表达式,获得符合条件的第一个节点
AppentChild:追加指定的节点到子节点列表的末尾
InsertAfter:在指定节点之后插入节点。插入的节点必须是指定节点的父级节点
InsertBefore:在指定节点之前插入节点。插入的节点必须是指定节点的父级节点。
RemoveChild:从节点列表中删除指定的节点
ReplaceChild:使用新的节点替换原有的节点
RemoveAll:删除当前节点下的所有节点
WriteContentTo:使用XmlWriter保存当前节点的子节点数据
WriteTo:使用XmlWriter保存当前节点的所有数据。
下面演示如何对XmlNode对象的节点进行灵活多样的操作。代码如下
属性详解
XmlNode类的主要属性
NodeType:节点类型,可以是XmlNodeType枚举中,除了EndElement,EndEntity和None之外的任何一个值
Attributes:当节点的NodeType为XmlNodeType.Element,节点的属性列表
Prefix:节点的命名空间前缀
Value:节点值
InnerText:所有子字节点值的串联字符串
InnerXml:所有子节点的XML字符串
OuterXml:节点自身及其所有子节点的XML字符串
典型应用:动态获取XML文件指定的节点
利用XmlNode类提供的节点结构描述和操作功能,可以方便地获取DOM结构中指定的节点。本例的目的是说明何如通过XmlNode提供的方法,获取XML数据中指定的节点,并将节点的数据显示出来。实例的演示步骤如下:
1、开发文本编辑器,编写一个XML文件,默认名为“Book.xml”,并保存到指定的路径中,例如“C:\Book.xml”。内容如下:
<?xml version="1.0"?><store> <book id = "1" genre="novel" publicationdate="1997" ISBN="1-861001-57-5"> <title>Pride And Prejudice</title> <price>24.95</price> </book> <book id = "2" genre="business" publicationdate="2003" ISBN="4-746623-03-2"> <title>Custumor Manger</title> <price>31.46</price> </book></store>
4、添加一个静态的返回XmlNode类的FindBook方法,该方法具有三个参数,其中XmlNode参数表示将要查找的XML节点,String path参数表示XML节点所在的路径,String expression参数表示定位元素的表达式。其代码如下:
static private XmlNode FindBook(XmlNode node, String path, String expression) { String xmlpath = path + "[" + expression + "]"; return node.SelectSingleNode(xmlpath); }
5、添加一个静态的返回XmlNode类的FindBook重载方法,该方法具有四个参数,其中XmlNode node参数表示将要查找的XML节点,String path参数表示XML节点所在的路径,String attribute参数表示该节点的属性名称,String value参数表示属性的取值范围。代码如下:
static private XmlNode FindBook(XmlNode node, String path, String attribute, String value) { String xmlpath = path + "[@" + attribute + "='" + value + "']"; return node.SelectSingleNode(xmlpath); }
6、在Main方法中编写主程序,代码如下:
static void Main(string[] args) { XmlDocument doc = new XmlDocument(); doc.Load(@"C:\book.xml"); XmlNode root = doc.DocumentElement; Console.WriteLine(FindBook(root, "/store/book", "1").InnerXml); Console.WriteLine(FindBook(root, "/store/book", "ISBN", "4-746623-03-2").InnerXml); Console.ReadLine(); }
7、运行程序,显示结果如下:
- System.Xml命名空间与XmlNode类
- System.Xml 命名空间
- System.Xml.XmlNode 内存和效率问题
- URI与XML命名空间
- XML与XML 命名空间(Namespaces)
- 类与命名空间
- 类与命名空间
- 对象序列化:使用System.Xml.Serialization命名空间
- System 命名空间
- System.IO命名空间
- System.Text命名空间
- System.Management 命名空间
- System.Web 命名空间
- System.Globalization 命名空间
- System.Management命名空间
- System.Collections 命名空间
- System.Data 命名空间
- System.Globalization命名空间
- 人生是什么?感悟3:工作不是生活的全部
- Discuz模板变量使用说明
- ARM的一些总结
- sql不能附加数据库
- 解决innerHTML时JS不生效
- System.Xml命名空间与XmlNode类
- TraceTool 跟踪工具的瑞士军刀(C++版使用)
- WindowsPhone之我见
- 关于JAVASCRIPT中的isNaN()方法的理解(转)
- 网站开发人员应该知道的61件事
- 配置 Eclipse CDT + MSVC + CMake,VS之外的另一选择
- 第三章 --- 第一节
- iphone开发--使用ASIHTTPRequest实现下载,断点续传功能
- html 动态修改onclick事件