[转]XML中元素(Element)与节点(Node)的区别
前言:
element是特殊的node
一段纯文本即text-node也是node 但不是element
w3c的原话是
A
node can be an element node, an attribute node, a text node, or any
other of the node types explained in the "Node types" chapter.
一、xmlnode类节点:
xmlnode类表示xml文档中的单个节点,其命名空间为:System。Xml
XmlNode的三个最主要的子类包括:XmlDocument、XmlDataDocument及XmlDocumentFragment
1.XmlNode类的属性:
public virtual bool HasChildNodes {get;} 获取一个值,该值指示当前节点是否有任何子节点
public virtual XmlNodeList ChildNodes {get;} 获取当前节点的所有子节点
public virtual XmlNode FirstChild {get;} 获取当前节点的第一个子级
public virtual XmlNode LastChild {get;} 获取当前节点的最后一个子级
public virtual XmlNode ParentNode {get;} 获取当前节点的父级
public virtual XmlNode NextSibling {get;} 获取当前节点的下一个兄弟节点
public virtual XmlNode PreviousSibling {get;} 获取当前节点的上一个兄弟节点
public virtual string InnerText {get; set;} 获取或设置当前节点及其所有子节点的文本内容的串联值
public virtual string InnerXml {get; set;} 获取或设置仅代表当前节点的子节点的标记
public virtual string OuterXml {get;} 获取表示当前节点及其所有子节点的标记
public virtual string Attributes{get;} 获取一个XmlAttributeCollection,包含该节点的属性
public virtual string Item{get;set;} 获取指定的子元素
XmlNode类的常用方法
publlic virtual XmlNodeListSelectNodes(string); 选择文档中匹配 XPath 表达式的节点列表
publlic virtual XmlNode SelectSingleNode(string); 选择文档中匹配 XPath表达式的第一个 XmlNode
public virtual XmlNode AppendChild(XmlNode newChild) 将指定的节点添加到该节点的子节点列表的末尾
public virtual XmlNode PrependChild(XmlNode newChild)将指定的节点添加到该节点的子节点列表的开头
public virtual XmlNode RemoveChild(XmlNode oldChild) 移除指定的子节点
public virtual XmlNode ReplaceChild(XmlNode newChild,XmlNodeoldChild) 用 newChild 节点替换子节点 oldChild
public virtual bool equals() 确定两个object实例是否相等
public virtual bool ReferenceEquals() 确定指定的Object 实例是否是相同的实例
public virtual string ToString() 返回当前object的string
public virtual bool XmlNode() 当在派生类中被重写时,该节点的所有字节点会保存到指定的XmlWriter中
二. XmlNodeList类:
该类表示XmlNode的有序集合,它有以下常用成员:
Count——以整数形式返回XmlNodeList中的节点数
ItemOf——搜索在指定索引处的节点
GetEnumerator()——提供迭代遍历节点列表的foreach样式
Item()——返回参数指定的索引处的节点
三.XmlDocument类
XmlDocument类的对象代表了一个XML文档
1. XmlDocument类的属性:
Attributes ——包含节点属性
ChildNodes——获取节点的所有子节点
DocumentElement——获取文档的根XmlElement
DocumentType——获取包含doctype声明的节点
FirstChild——获取节点的第一个子级
LastChild——获取节点的最后一个子级
ParentNode——获取该节点的父级
HasChildNodes——获取一个值,该值指示当前节点是否有任何子节点
InnerText ——获取或设置当前节点及其所有子节点的文本内容的串联值
InnerXml——获取或设置仅代表当前节点的子节点的标记
OuterXml ——获取表示当前节点及其所有子节点的标记
Item——获取指定的子元素
value——获取或设置节点的值
2.XmlDocument类常用方法
Save——将XML文档保存到指定的位置
CreateAttribute——创建此节点的一个副本
createElement_x——创建XmElement
CreateNode——创建XmlNode
CreateTextNode——创建具有指定文本的XmlText
GetType——获取当前实例的Type
ImportNode——将节点从另一个文档导入到当前文档
InsertAfter——将指定的节点紧接着插入指定的引用节点之后
InsertBefore——将指定的节点紧接着插入指定的引用节点之前
Load——加载指定的xml数据
LoadXml——从指定的字符串加载xml文档
SelectNodes——选择文档中匹配 XPath 表达式的节点列表
SelectSingleNode——选择文档中匹配 XPath 表达式的第一个 XmlNode
AppendChild——将指定的节点添加到该节点的子节点列表的末尾
PrependChild——将指定的节点添加到该节点的子节点列表的开头
RemoveChild——移除指定的子节点
ReplaceChild——用 newChild 节点替换子节点 oldChild
3.XmlDocument类常用Public事件
NodeChaged——当属于该文档的节点的Value已被更改时发生
NodeChaging——当属于该文档的节点的Value将被更改时发生
NodeInserted——当属于该文档的节点已被插入另一个节点时发生
NodeInserting——当属于该文档的节点已将插入另一个节点时发生
NodeRemoved——当属于该文档的节点已被从其父级移除时发生
NodeRemoved——当属于该文档的节点将被从其父级移除时发生
实例:
界面输入联系人信息保存到xml文件中
protected void Page_Load(object sender,EventArgs e)
...{
}
private void SaveXMLData_nodemode()
...{
try
...{
//创建一个XmlDocument对象,用于载入存储信息的xml文件
XmlDocument xdoc = new XmlDocument();
xdoc.Load(Server.MapPath("phonobood.xml"));
//创建一个新的menber节点并将它添加到根节点下
XmlElement parenetNode =xdoc.createElement_x("member");
xdoc.DocumentElement.PrependChild(parenetNode);
//创建所有用于存储信息的节点
XmlElement nameNode =xdoc.createElement_x("name");
XmlElement telphoneNode =xdoc.createElement_x("telphone");
XmlElement qqNode =xdoc.createElement_x("qq");
//XmlElement msnNode =xdoc.createElement_x("msn");
//获取文本信息
XmlText nameText =xdoc.CreateTextNode(Request.Form.Get("name"));
XmlText telphoneText =xdoc.CreateTextNode(Request.Form.Get("telphone"));
XmlText qqText =xdoc.CreateTextNode(Request.Form.Get("qq"));
//将上面创建的各个存储信息的节点添加到menber节点下,但并不包含最终的值
parenetNode.AppendChild(nameNode);
parenetNode.AppendChild(telphoneNode);
parenetNode.AppendChild(qqNode);
//将上面获取的文本信息添加到与之相对应的节点中
nameNode.AppendChild(nameText);
telphoneNode.AppendChild(telphoneText);
qqNode.AppendChild(qqText);
//保存存储信息的xml文件
xdoc.Save(Server.MapPath("phonebood.xml"));
}
catch (exception se)
...{
Console.WriteLine(se.Message);
}
}
XmlNode和XmlElement。这两个类的功能极其类似:
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的父类。
System.Xml.XmlNode System.Xml.XmlLinkedNodeSystem.Xml.XmlElement从结构上讲.XmlElement是XmlNode 派生类. 所以两者比较没什么意义. 1.XmlNode 为抽像类, 不能直接实例化.
[转]XML中元素(Element)与节点(Node)的区别的更多相关文章
- 元素(Element)和结点(Node)的区别(org.w3c.dom)
1.元素(Element)和结点(Node)的区别, 元素是一个小范围的定义,必须是含有完整信息的结点才是一个元素,例如 - . 但是一个结点不一定是一个元素,而一个元素一定是一个结点. 什么是nod ...
- html中元素的id和name的区别(2016-1-22)
HTML中元素的Id和Name属性区别 一直以来一直以为在html中,name和id没什么区别,今天遇到一个坑才发现(PHP获取不到表单数据,原因:元素没有name,只定义了id),这两者差别还是很大 ...
- 详解web.xml中元素的加载顺序
一.背景 最近在项目中遇到了启动时出现加载service注解注入失败的问题,后来经过不懈努力发现了是因为web.xml配置文件中的元素加载顺序导致的,那么就抽空研究了以下tomcat在启动时web.x ...
- web.xml中Filter,Listener,Servlet的区别
一.Servlet Servlet是基本的服务端程序,他来自接口Servlet,接口中有方法service.而Servlet的一个重要实现类,则是tomcat服务器的核心,那就是HttpServlet ...
- 配置文件Struts.xml 中type属性 redirect,redirectAction,chain的区别
1.redirect:action处理完后重定向到一个视图资源(如:jsp页面),请求参数全部丢失,action处理结果也全部丢失. 2.redirectAction:action处理完后重定向到一 ...
- 【XML】-- C#读取XML中元素和属性的值
Xml是扩展标记语言的简写,是一种开发的文本格式. 啰嗦几句儿:老师布置的一个小作业却让我的脑细胞死了一堆,难的不是代码,是n多嵌套的if.foreach,做完这个,我使劲儿想:我一女孩,没有更多女孩 ...
- .net中使用XPath语言在xml中判断是否存在节点值的方法
book.xml<?xml version="1.0" encoding="utf-8" ?> <bookstore> <boo ...
- 得到Xml中 元素的值
<?xml version="1.0" encoding="utf-8" ?><Response service="RouteSer ...
- 【转】详解web.xml中元素的加载顺序
顺序为: context-param --> listeners --> filters --> servlets(如DispatcherServlet等) 详见<https: ...
随机推荐
- 多表数据转化器MTDC
需求 根据配置文件的映射规则,将一种模型和数据映射成另外一种模型和数据.如图: 其中,a1,b1,c1,d1为表主键,关系:A.a1=B.b1=C.c2=D.d1 解决思路 解析模型配置文件,将每个转 ...
- java===java基础学习(13)---this,static(静态变量和静态方法)的使用
package dog; public class PersonAndDog { public static void main(String[] args) { Dogs da_huang = ne ...
- MSCL超级工具类(C#),开发人员必备,开发利器
MSCL超强工具类库 是基于C#开发的超强工具类集合,涵盖了日常B/S或C/S开发的诸多方面,包含上百个常用封装类(数据库操作类全面支持Mysql.Access.Oracle.Sqlserver.Sq ...
- 【bzoj4896】补退选
傻逼题. 每个点维护下vector,然后随便做. #include<bits/stdc++.h> ; using namespace std; typedef long long ll; ...
- HDU 6119 小小粉丝度度熊 双指针
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6119 题意:中文题面. 解法:先处理可能交叉的区间,然后容易发现满足双指针的特性. //HDU 611 ...
- Atom:优雅迷人的编辑神器
对于热爱markdown写作的人来说,Atom同样是一款拥有无穷魅力的写作软件.我不怕它无法满足你的需求,就怕你不给一个机会了解它,那么,这将是一场遗憾的错过. 大学的时候,坊间对那些编程高手有一个令 ...
- Struts2学习笔记04 之 拦截器
一.创建拦截器组件 1. 创建一个类,实现Interceptor接口,并实现intercept方法 2.注册拦截器 3.引用拦截器 二.拦截器栈 预置拦截器: 默认引用拦截器 拦截器调用顺序: Fil ...
- linux命令(37):locate命令
1.命令格式: Locate [选择参数] [样式] 2.命令功能: locate命令可以在搜寻数据库时快速找到档案,数据库由updatedb程序来更新,updatedb是由cron daemon周期 ...
- 属性名、变量名与 内部关键字 重名 加&
procedure TForm4.btn3Click(Sender: TObject); var MyQj: TQJson; MyPrinter: TPrinter; begin MyQj := TQ ...
- POJ 1160 Post Office(DP+经典预处理)
题目链接:http://poj.org/problem?id=1160 题目大意:在v个村庄中建立p个邮局,求所有村庄到它最近的邮局的距离和,村庄在一条直线上,邮局建在村庄上. 解题思路:设dp[i] ...