XmlNode与XmlElement的区别

原文链接:http://www.cnblogs.com/oilsun/archive/2012/07/07/2580427.html

XmlNode与XmlElement的区别总结

今 天在做ASP.NET操作XML文档的过程中,发现了两个类:XmlNode和XmlElement。这两个类的功能极其类似(因为我们一般都是在对 Element节点进行操作)。上网搜罗了半天,千篇一律的答案。永远说不到重点,有些人回答又特别含糊,无奈之下,自己设断点尝试对比效果,现在总结如 下:
1、通过继承关系XmlElement继承自XmlLinkedNode又继承自XmlNode类,由此可知XmlElement是XmlNode的子 类。我们知道子类继承了父类所有的属性和方法,因此,XmlNode所拥有的方法和属性,在XmlElement类中也是可以使用的。
2、XmlElement是特殊的XmlNode类,Xml节点有多种类型:属性节点、注释节点、文本节点、元素节点等。也就是XmlNode是这多种节点的统称。但是XmlElement专门指的就是元素节点。
3、XmlElement是具现类,可以直接实例化,而XmlNode是抽象类,必须通过XmlDocument实例通过CreateNode创建。
4、XmlElement拥有众多对Attribute的操作方法,可以方便的对其属性进行读写操作(XmlNode也可以通过Attributes属性获取属性列表)。
5、在网上看到有人这么评论这两个类的区别:XmlNode包含子节点,XmlElement只包含属性及其本身不含有子节点。但是我通过代码测试,发现 即使是XmlElement,也可以通过ChildNodes来获取子节点列表。虽然在断点中断模式下,我并没有发现XmlElement有 ChildNodes属性。举例如下:
//是XmlNode也是XmlElement,但是img以及aspnet.jpg只是XmlNode
       //既是XmlNode 也是XmlElement    
           C#      //只是XmlNode    
          

也就是元素节点可以相应转换为XmlElement,这样既可以使用XmlNode的功能,也可以使用它特有的对属性的操作方法。
任意节点都可以使用XmlNode,因为XmlNode是所有Node的父类。

管理XML元素的类:XmlElement类

XmlElement类表示DOM结构中的元素。元素是DOM结构中最常见的节点。该类型继承于XMLNode类的子类XmlLinkNode类, 继承了XmlNode的特点,同时还提供了XML数据中针对于元素的一些方法和属性,以便更好地反映元素节点的特征,以及更便捷地操作元素。

该类除继承XmlNode的特征以外,最重要的特征,和其他XmlNode类派生类不同的地方就是其元素拥有自己的属性集合。XmlElement 类为此提供了多种对于属性的访问手段。例如:可以使用GetAttribute方法获取指定的属性,可以使用SetAttribute设置指定的属性,可 以使用RemoveAttribute移除指定的属性,可以使用GetAttributeNode获取属性节点,还可以直接通过访问该类的 Attribute属性获得元素的属性列表——该列表支持索引值和名称两种访问指定属性的手段。

语法定义:

public class XmlElement : XmlLinkedNode

因为XmlElement类的构造函数是受保护的,所以不能使用其创建XmlElement类的实例。一般采用的做法是在XmlDocument类 实例中,使用CreateElement方法创建XmlElement类的实例。下面的代码演示了使用不同的方法建立XmlElement的实例:


 

方法:

XmlElement类提供了一系列方法来对XML文档对象进行操作。主要方法如下:

AppendChild:将指定的节点添加到当前元素的子节点列表的末尾

Clone:克隆当前元素实例

CloneNode:克隆当前元素实例,该方法与Clone方法的区别在于,CloneNode能够通过指定bool deep参数的值,来决定是否克隆当前元素的子节点。

CreateNavigator:创建浏览当期元素的XpathNavigator

GeAttribute:获取当前元素的指定属性的属性值

GetAttributeNode:获取当前元素指定的属性节点

GetElementsByTagName:包含指定名称元素所有子节点的列表

HasAttribute:获取指示当前节点是否具有指定的属性值

InsertAfter:在指定元素之后插入节点

InsertBefore:在指定元素之前插入节点

PrependChild:在指定元素的子节点列表开头添加节点

RemoveAll:移除除了默认属性以外当前元素的所有指定属性的子节点

RemoveAllAttributes:移除除了默认属性以外的所有属性

RemoveAttribute:移除指定的属性

RemoveAttributeAt:从元素中移除指定位置的属性

RemoveAttributeNode:移除指定的XmlAttribute节点

RemoveChild:从节点列表中删除指定的子节点

ReplaceChild:使用新的节点替换原有的节点

SelectNodes:根据XPath表达式,获得符合条件的节点列表

SelectSingleNode:根据XPath表达式,获得符合条件的第一个节点

SetAttribute:指定属性的值

SetAttributeNode:向当前元素添加属性

WriteContentTo:使用指定的XmlWriter类实例保存当前元素的所有子节点

WriteTo:使用指定的XmlWriter保存当前元素

 

属性详解:

Attitudes:获取包含当前元素属性的列表

BaseURI:获取当前元素的基URI

ChildNodes:获取当前元素的所有子节点

FirstChild:获取当前元素的第一个子节点

HasAttributes:获取指示当前元素是否有任何属性值

HasChildNodes:获取指示当前元素是否有任何子节点的值

InnerText : 获取或指定当前元素及其所有子节点的串联值

InnerXml:获取或指定包含当前元素内所有子节点的、包含结构标志的XML文本

IsEmpty:获取或指定元素是否以短标记格式序列化元素的值

IsReadOnly:获取指示当前元素是否是只读的值

Item:获取当前元素指定的子元素

LastChild:获取当前元素的最后一个子节点

LocalName:获取当前元素的本地名称

Name:获取当前元素的限定名

NamespaceUri:获取当前元素的命名空间URI

NextSibling : 获取紧接在当前元素后一个同级节点

NodeType:获取当前元素的节点类型

OuterXml:获取表示当前元素及其所有子节点的XML文本

OwnerDocument:获取当前元素所属的XmlDocument

ParentNode:获取当前节点的父节点

Prefix:获取或指定当前元素的命名空间前缀

PreviousSibling:获取紧接当前元素的前一个同级节点

Value:获取或指定当前元素的值

 


应用:XML元素的添加、修改和删除

利用XmlElement类提供的对元素结构描述和操作的功能,可以方便地对XML数据中的元素进行操作,包括元素的添加,以及删除和修改其内容。XmlElement类的主要特征是关于元素本身属性的一系列属性和方法。

1、编写一个XML文件,命名为“Book.xml”,并保存到指定的路径中。内容如下:


2、新建一个Windows控制台应用程序,命名为"EditElement",在Main方法中编写主程序,代码如下:

 


XPath的学习: http://www.w3school.com.cn/xpath/


这只是我个人试验后的戳见,有不对的地方,或者是有需要补充的地方希望前辈们指正。

  • 10
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#中,XmlNodeXmlElement是两个用于处理XML文档的类。 XmlNode是一个抽象类,表示XML文档中的一个节点。它可以表示元素、属性、文本、注释等不同类型的节点。XmlNode类提供了许多属性和方法,用于获取、修改和操作XML节点的内容和结构。 XmlElementXmlNode的一个派生类,表示XML文档中的一个元素节点。它用于表示包含标签和标签内容的节点。XmlElement类提供了一些特定于元素的属性和方法,例如获取元素名称、添加子节点、设置属性等。 以下是使用XmlNodeXmlElement类的示例代码: ```csharp using System; using System.Xml; class Program { static void Main() { // 创建一个XmlDocument对象 XmlDocument xmlDoc = new XmlDocument(); // 创建一个根元素节点 XmlElement rootElement = xmlDoc.CreateElement("RootElement"); // 创建一个子元素节点 XmlElement childElement = xmlDoc.CreateElement("ChildElement"); childElement.InnerText = "Hello, World!"; // 将子元素添加到根元素中 rootElement.AppendChild(childElement); // 将根元素添加到XmlDocument中 xmlDoc.AppendChild(rootElement); // 输出整个XML文档 Console.WriteLine(xmlDoc.OuterXml); } } ``` 在上述代码中,我们首先创建了一个XmlDocument对象。然后,使用CreateElement方法创建了一个根元素节点和一个子元素节点,并为子元素节点设置了文本内容。接着,将子元素节点添加到根元素节点中,再将根元素节点添加到XmlDocument对象中。最后,通过Console.WriteLine输出整个XML文档。 运行以上代码,将会输出以下XML文档: ```xml <RootElement> <ChildElement>Hello, World!</ChildElement> </RootElement> ``` 这样就成功创建了一个包含根元素和子元素的XML文档。你可以根据需要使用XmlNodeXmlElement类来读取、修改或保存XML文档的节点和元素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值