XML 相关总结
经过昨天的学习,了解到DOM只是提供了一种解析XML的方式(接口),而DOM的接口与语言无关。对DOM接口的实现有微软的MSXML,Xerces-C(Apache),Java的XML4J等。下面对DOM和MSXML的几个接口分别介绍(网上资料,经整理):
一.DOM的四个基本接口
在DOM接口规范中,有四个基本的接口:Document,Node,NodeList以及NamedNodeMap。在这四个基本接口中,Document接口是对文档进行操作的入口,它是从Node接口继承过来的。Node接口是其他大多数接口的父类,像Documet,Element,Attribute,Text,Comment等接口都是从Node接口继承过来的。NodeList接口是一个节点的集合,它包含了某个节点中的所有子节点。NamedNodeMap接口也是一个节点的集合,通过该接口,可以建立节点名和节点之间的一一映射关系,从而利用节点名可以直接访问特定的节点。下面将对这四个接口分别做一些简单的介绍。
1、Document接口
Document接口代表了整个XML/HTML文档,因此,它是整棵文档树的根,提供了对文档中的数据进行访问和操作的入口。
由于元素、文本节点、注释、处理指令等都不能脱离文档的上下文关系而独立存在,所以在Document接口提供了创建其他节点对象的方法,通过该方法创建的节点对象都有一个ownerDocument属性,用来表明当前节点是由谁所创建的以及节点同Document之间的联系。
在DOM树中,Document节点是DOM树中的根节点,也即对XML文档进行操作的入口节点。通过Docuemt节点,可以访问到文档中的其他节点,如处理指令、注释、文档类型以及XML文档的根元素节点等等。另外,在一棵DOM树中,Document节点可以包含多个处理指令、多个注释作为其子节点,而文档类型节点和XML文档根元素节点都是唯一的。
关于Document接口的IDL(InterfaceDefinitionLanguage接口定义语言)定义和其中一些比较常用的属性和方法的详细介绍可以在MSDN中找到。
2、Node接口
Node接口在整个DOM树中具有举足轻重的地位,DOM接口中有很大一部分接口是从Node接口继承过来的,例如,Element、Attr、CDATASection等接口,都是从Node继承过来的。在DOM树中,Node接口代表了树中的一个节点。
3、NodeList接口
NodeList接口提供了对节点集合的抽象定义,它并不包含如何实现这个节点集的定义。NodeList用于表示有顺序关系的一组节点,比如某个节点的子节点序列。另外,它还出现在一些方法的返回值中,例如GetNodeByName。
在DOM中,NodeList的对象是"live"的,换句话说,对文档的改变,会直接反映到相关的NodeList对象中。例如,如果通过DOM获得一个NodeList对象,该对象中包含了某个Element节点的所有子节点的集合,那么,当再通过DOM对Element节点进行操作(添加、删除、改动节点中的子节点)时,这些改变将会自动地反映到NodeList对象中,而不需DOM应用程序再做其他额外的操作。
NodeList中的每个item都可以通过一个索引来访问,该索引值从0开始。
4、NamedNodeMap接口
实现了NamedNodeMap接口的对象中包含了可以通过名字来访问的一组节点的集合。不过注意,NamedNodeMap并不是从NodeList继承过来的,它所包含的节点集中的节点是无序的。尽管这些节点也可以通过索引来进行访问,但这只是提供了枚举NamedNodeMap中所包含节点的一种简单方法,并不表明在DOM规范中为NamedNodeMap中的节点规定了一种排列顺序。
NamedNodeMap表示的是一组节点和其唯一名字的一一对应关系,这个接口主要用在属性节点的表示上。与NodeList相同,在DOM中,NamedNodeMap对象也是“live”的。
二.MSXML的几个重要接口
从理论上说,根据XML的格式定义,我们可以自己编写一个XML的语法分析器,但实际上微软已经给我们提供了一个XML语法解析器,即一个叫做MSXML.DLL的动态链接库,实际上它是一个COM(ComponentObjectModel)对象库,里面封装了进行XML解析时所需要的所有对象。因为COM是一种以二进制格式出现的和语言无关的可重用对象,所以你可以用任何语言(比如VB,VC,DELPHI,C++Builder甚至是脚本语言等等)对它进行调用,在你的应用中实现对XML文档的解析。
MSXML.DLL所包括的主要COM接口有:
1.IXMLDOMDocument(Document接口)
DOMDocument对象是XMLDOM的基础,你可以利用它所暴露的属性和方法来浏览、查询和修改XML文档的内容和结构。DOMDocument表示了树的顶层节点,它实现了DOM文档的所有的基本方法,并且提供了额外的成员函数来支持XSL和XSLT。它创建了一个文档对象,所有其他的对象都可以从这个文档对象中得到和创建。
2.IXMLDOMNode(Node接口)
IXMLDOMNode是文档对象模型(DOM)中的基本对象,元素、属性、注释、过程指令和其他的文档组件都可以认为是IXMLDOMNode。事实上,DOMDocument对象本身也是一个IXMLDOMNode对象。
3.IXMLDOMNodeList
IXMLDOMNodeList实际上是一个节点(Node)对象的集合,节点的增加、删除和变化都可以在集合中立刻反映出来,可以通过"for.循环"结构来遍历所有的节点。
4.IXMLDOMParseError
IXMLDOMParseError接口用来返回在解析过程中所出现的详细的信息,包括错误号、行号、字符位置和文本描述。
在具体应用时可以用DOMDocument的Load方法来装载XML文档,用IXMLDOMNode的selectNodes(查询的结果有多个,得到存放搜索结果的链表)或selectSingleNode(查询的结果有一个,在有多个的情况下返回找到的第一个节点)方法进行查询,用createNode和appendChild方法来创建节点和追加节点,用IXMLDOMElement的setAttribute和getAttribute方法来设置和获得节点的属性。
三.Document属性和方法
Document 属性
|
async
|
属性说明
|
async 属性表示是否允许异步的下载。
|
基本语法
|
boolValue = XMLDocument.async;
XMLDocument.async = boolValue;
|
语法说明
|
布尔值是可擦写的(read/write),如果准许异步下载,值为True;反之则为False。
|
使用范例
|
xmlDoc.async = "false";
alert(xmlDoc.async);
|
attributes
|
属性说明
|
传回目前节点的属性列表
|
基本语法
|
objAttributeList = xmlNode.attributes;
|
语法说明
|
传回一个物件。如果此节点不能包含属性,则传回空值。
|
使用范例
|
objAttList = xmlDoc.documentElement.attributes;
alert(objAttList);
|
childNodes
|
属性说明
|
传回一个节点清单,包含该节点所有可用的子节点。
|
基本语法
|
objNodeList=node.childNodes;
|
语法说明
|
传回一个物件。假如这节点没有子节点,传回null。
|
使用范例
|
objNodeList = xmlDoc.childNodes;
alert(objNodeList);
|
doctype
|
属性说明
|
传回文件型态节点,包含目前文件的DTD。这节点是一般的文件型态宣告,例如,节点<!DOCTYPE EMAIL SYSTEM "LstA_2.dtd">,名为EMAIL 的节点物件会被传回。
|
基本语法
|
objDocType=xmlDocument.doctype;
|
语法说明
|
传回一个对象,这个属性是只读的。假如这文件不包含DTD,会传回null。
|
使用范例
|
objDocType = xmlDoc.doctype;
alert(objDocType.nodeName);
|
documentElement
|
属性说明
|
确认XML 文件的根(Root)节点。
|
基本语法
|
objDoc=xmlDocument.documentElement;
|
语法说明
|
返回一个在单一根文件元素中包含数据的对象。此属性可读/写,如果文件中不包含根节点,将传回null。
|
使用范例
|
objDocRoot = xmlDoc.documentElement;
alert(objDocRoot);
|
firstChild
|
属性说明
|
确认在目前节点中的第一个子元素。
|
基本语法
|
objFirstChild = xmlDocNode.firstChild ;
|
语法说明
|
此属性只读且会传回一对象,如果节点中没有包含第一个子元素,将传回null。
|
使用范例
|
objFirstChild = xmlDoc.documentElement.firstChild;
alert(objFirstChild);
|
implementation
|
属性说明
|
DOM 应用程序能使用其它实作中的对象。implementation 属性确认目前XML 文件的DOMimplementation 对象。
|
基本语法
|
objImplementation = xmlDocument.implementation;
|
语法说明
|
此属性只读且传回一个对象。
|
使用范例
|
objImp = xmlDoc.implementation;
alert(objImp);
|
lastChild
|
属性说明
|
确认目前节点中最后的子元素。
|
基本语法
|
objLastChild = xmlDocNode.lastChild;
|
语法说明
|
此属性只读且传回一个对象。如果节点中没有包含最后子元素,将传回null。
|
使用范例
|
objLastChild = xmlDoc.documentElement.lastChild;
alert(objLastChild);
|
nextSibling
|
属性说明
|
在目前文件节点的子节点列表中传回下一个兄弟节点。
|
基本语法
|
objNextSibling = xmlDocNode.nextSibling;
|
语法说明
|
此属性是只读且传回一个对象。如果节点中没有包含其它的相关节点,会传回null。
|
使用范例
|
objSibling= xmlDoc . documentElement. childNodes.item(1) . nextSibling;
alert(objSibling);
|
nodeName
|
属性说明
|
传回代表目前节点名称的字符串。
|
基本语法
|
strNodeName = xmlDocNode.nodeName ;
|
语法说明
|
传回一个字符串。这个属性是只读的,传回元素名称、属性或实体参照。
|
使用范例
|
strNodeName = xmlDoc.documentElement.nodeName;
alert(strNodeName);
|
nodeType
|
属性说明
|
辨识节点的DOM 型态
|
基本语法
|
numNodeType = xmlDocNode.nodeType ;
|
语法说明
|
此属性只读且传回一个数值
有效的数值符合以下的型别:
1-ELEMENT
2-ATTRIBUTE
3-TEXT
4-CDATA
5-ENTITY REFERENCE
6-ENTITY
7-PI (processing instruction)
8-COMMENT
9-DOCUMENT
10-DOCUMENT TYPE
11-DOCUMENT FRAGMENT
12-NOTATION
|
使用范例
|
numNodeType = xmlDoc.documentElement.nodeType;
alert(numNodeType);v</DIV></TD></TR></TBODY></TABLE>
<DIV class=content>
|
nodeValue
|
属性说明
|
传回指定节点相关的文字。这并非一个元素中数据的值,而是与一个节点相关且未解析的文字,就像一个属性或者一个处理指令
|
基本语法
|
分享到:
Global site tag (gtag.js) - Google Analytics
|
相关推荐
总结起来,XML解析是理解和处理结构化数据的关键技能,无论是在服务器端还是客户端,都有广泛的应用。DOM和SAX解析器提供了解析XML的不同策略,开发者应根据具体需求选择合适的方法。同时,JavaScript在Web环境中...
总结来说,Activity和main.xml文件在Android应用开发中起着至关重要的作用。Activity负责处理用户交互,而main.xml文件则定义了Activity的用户界面。通过合理的布局设计和Activity的编程,开发者可以创建出丰富的...
这篇文档是对 Selenium 2.0 中 WebDriver 的第二次学习总结,主要关注如何使用 WebDriver 进行网页操作和元素定位。 首先,访问页面是 WebDriver 最基本的功能。通过调用 `driver.get(url)` 或 `driver.navigate()....
Android 自定义控件步骤总结 Android 自定义控件步骤总结是 Android 开发中非常重要的一部分。系统提供给我们的控件不能满足我们的需求,所以我们往往会自定义一些控件。在自定义过程中遵循以下几个步骤: 一、...
1. **引入依赖**: 在 Maven 或 Gradle 的配置文件中添加 Ehcache 和 Spring 相关的依赖。例如,如果是 Maven,可以在 `pom.xml` 文件中加入如下依赖: ```xml <groupId>net.sf.ehcache</groupId> <artifactId>...
标题“hibernate官方入门教程 (转载)”表明这是一份关于Hibernate框架的基础教学资源,可能是从官方文档或者其他可靠来源整理而来的,适合初学者了解和学习Hibernate。 描述中提到的“NULL”意味着没有具体的描述...
1.Configuration.xml 是 mybatis 用来建立 sessionFactory 用的,里面主要包含了数据库连接相关东西,还有 java 类所对应的别名,比如 <typeAlias alias="User" type="com.yihaomen.mybatis.model.User"/> 这个别名...
总结来说,Android的动画机制为开发者提供了丰富的工具,使得在移动应用中实现各种视觉效果成为可能。通过学习和实践这四种基础动画,开发者可以为用户提供更加动态和吸引人的交互体验。在实际项目中,结合属性动画...
- 未经许可,严禁任何形式的转载! #### 四、总结 本文详细介绍了 `XMLHttpRequest` 对象中的 `responseXML` 属性的相关知识,包括其定义、功能、使用方法以及注意事项。此外还提供了关于 `XMLHttpRequest` 对象的...
设计模式是在特定情境下,为解决软件设计中常见问题而总结出的最佳实践。它们是经验的结晶,经过了时间的检验,被广泛应用于各种编程语言中,包括Android。设计模式并不直接解决具体的技术问题,而是提供了一种结构...
总结来说,通过 Tomcat 和 Memcached 集群的集成,我们可以实现跨服务器的 Session 共享,这对于高并发、分布式部署的 Web 应用至关重要。这个过程中涉及的关键点包括 Memcached 的安装和配置,以及 Tomcat 的 ...
AJAX(异步JavaScript和XML)允许我们在不刷新整个页面的情况下与服务器交换数据并更新部分页面内容。通过定时发送请求到服务器,称为“轮询”,可以模拟页面刷新。例如,每5秒向服务器发送一次请求,检查是否有新...
每个模块都有自己的POM.xml文件,其中包含了项目的信息、依赖、构建过程等配置。通过在POM中声明子模块,我们可以把一个大项目拆分成多个独立的模块,每个模块负责特定的功能,便于代码的重用和团队协作。 2. 父...
本篇文章将深入探讨如何在Android应用程序中获取修改系统时间的权限,并提供相关源码分析。 首先,我们需要理解Android权限系统。Android采用的是基于权限的访问控制模型,每个应用都有自己的沙箱环境,互不干扰。...
总结,通过上述步骤,你可以利用FragmentActivity、Fragment、ViewPager和TabLayout在Android应用中实现点击和滑动切换页面的功能。这不仅增强了用户体验,也使代码结构更加清晰,易于维护。在实际开发中,你可能还...
总结,通过C#结合百度API、RSS解析和IP定位服务,我们可以构建一个功能丰富的应用,提供天气查询、新闻阅读和地理位置识别等功能。这些技术对于开发跨平台的.NET应用程序非常有用,可以提高用户体验并拓宽应用的实用...
jPDL(jBPM Process Definition Language)是jBPM特有的流程定义语言,它是一种XML格式,用于描述工作流的各个步骤、决策和交互。jPDL提供了丰富的元素,如任务(Task)、事件(Event)、网关(Gateway)等,帮助...
- **XML处理**:介绍如何在Qt中解析和操作XML文件。 - **Qt Quick/QML**:讲解如何使用Qt Quick和QML语言构建现代用户界面。 - **网络编程**:涵盖HTTP编程、FTP、UDP、TCP等网络通信协议的使用方法。 #### 三、...