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、运行程序,显示结果如下: