DOM解析器
创建一个Element节点,节点名称由name参数指定
创建一个Attr节点,属性名称由name参数指定,然 后利用setAttributeNode方法设置为某个节点的属性 创建一个CDATASection节点 创建一个具有指定内容的文本节点
Document document= builder.parse(new File("01.xml"));
builder对象除了调用public Document parse(File file)方法解析 文件外,还可以调用其它两个方法:
public Document parse(InputStream in) public Document parse(String uri)
返回
8.2 节点的类型
Document节点
Element节点
DocumentType节点
Element节点
Text节点
CDATASection节点
8.2.1 Node接口 8.2.2 NodeList接口
8.2.3 NamedNodeMap接口
返回
Node接口 (1)
DOM规范中很多接口都是从Node接口继承而来,在DOM规范中把XML 文件的每一个标记、属性、注释、文本内容等都看作节点。一个Node对象代 表了一个类型的节点。DOM规范中,不同类型的节点采用不同的整数加以区 分。为了保证日后能够容易地对节点类型进行扩充,W3C保留了1~200之间的 整数,作为不同节点类型的定义。具体对应关系见下表:
方法 getNodeName() getNodeValue() setNodeValue(String arg) getNodeType() getChildNodes() getFirstChild() getLastChild() getPreviousSibling() getNextSibling() getparentNode() getAttributes() appendChild(Node arg) hasChildNodes() insertBefore(Node arg1,Node arg2) removeChild(Node arg) replaceChild(Node arg1,Node arg2) getNamespaceURI() has Attributes() getTextContent() isSameNode(Node arg) isEqualNode(Node arg) 功能描述 获取当前节点的名称 获取当前节点的值 设置当前节点的值 获取当前节点的类型 获取当前节点的所有子节点,返回NodeList对象 获取当前节点的第一个子节点 获取当前节点的最后一个子节点 获取当前节点的前一个兄弟节点 获取当前节点的后一个兄弟节点 获取当前节点的父节点 获得当前节点的所有属性,返回NamedNodeMap对象 在当前节点的所有子节点之后添加新节点arg 判断当前节点是否有子节点 把节点arg2插入到当前节点的子节点arg1之前 从当前节点的子节点中删除arg节点 用arg2节点替换当前节点的子节点arg1 获得Namespace的URI 判断当前节点是否具有属性 获取当前节点的文本内容 判断当前节点与arg是否是同一个节点 判断当前节点与arg是否相等
8.1.1 DOM标准
8.1.2 认识DOM解析器
返回
DOM标准
DOM是Document Object Model文档对象模型的缩写,是W3C制定的 一套规范。依据DOM规范(/DOM/),DOM是一种与 浏览器、平台、语言无关的接口。各种语言可以按照DOM规范去实现这 些接口,给出解析文件的解析器。DOM规范中所指的文件相当广泛,其 中包括XML文件以及HTML文件。DOM有3个版本:
实体节点(Entity) 处理指令节点(ProcessingInstruction) Comment节点 Document节点 文档类型节点(DocumentType) 文档片段节点(DocumentFragment) Notation节点
5
6 7 8 9 10 11 12
ENTITY_REFERENCE_NODE
第8章 DOM解析器
8.1 DOM解析器 8.2 节点的类型 8.3 Document节点 8.4 Element节点 8.5 Text节点 8.6 CDATASection节点
第8章 DOM解析器
8.7 Attr节点 8.8 DocumentType节点 8.9 处理空白 8.10 验证规范性和有效性 8.11 使用DOM生成XML文件 8.12 XML与JSP的结合
8.1 DOM解析器
基于DOM的解析器称为DOM解析器。DOM解析器解析 XML文件的最大特点是把整个XML文件全部加载到内存中, 在内存中形成一个与XML文件结构相对应的节点树。然后 依据节点的子孙关系来遍历数据。通过DOM解析器处理 XML文件效率高,但是,十分消耗系统的资源,比较适合 复杂但相对较小的文件。
方法 getDocumentElement() getDoctype() getElementByTagName(String name) getElementByTagNameNS(String namespaceURI, String localname)
功能描述
返回当前节点的Element节点 返回当前节点的DocumentType子节点 返回一个NodeList对象,该对象由参数name指定的 节点的Element类型子孙节点组成。 返回一个NodeList对象,该对象由参数localname指 定的节点的Element类型子孙节点组成,localname的 名称空间由参数namespaceURI指定
ENTITY_NODE PROCESSING_INSTRUCTION_NODE COMMENT_NODE DOCUMENT_NODE DOCUMENT_TYPE_NODE DOCUMENT_FRAGMENT_NODE NOTATION_NODE
Node接口 (2)
Node接口定义了所有类型的节点都具有的属性和方法。 见下表:
Level:包括对XML1.0和HTML的支持,每个HTML元素被表示为一个接口。 它包括用于添加、编辑、移动和读取节点中包含的信息的方法等。 Level2:包括了更广泛的W3C推荐技术,比如层叠样式表(CSS)和 名称空间(XMLNamespaces),允许开发人员检测和使用可能适 用于某个节点的名称空间信息。Level2还支持W3C所谓的“事件”, 比如一个文件能对诸如鼠标移动之类的“事件”做出反应。 Level3:包括对创建Document对象(以前的版本将这个任务留给实现,使得 创建通用应用程序很困难)的更好支持、增强的名称空间支持,以 及用来处理文档加载和保存、验证以及XPath的新模块;XPath是在 XSL转换(XSL Transformation)以及其他XML技术中用 来选择节点的手段。 返回
8.3 Document节点(2)
Document节点常用的方法续表
方法 getElementById(String id) getXmlEncoding() getInputEncoding() getXmlStandalone() getXmlVersion() setDocumentURI(String documentURI) setXmlVersion(String mxlVersion) createElement(String name) 功能描述 方法,返回一个NodeList对象,该对象由给定ID的 节点的Element类型子孙节点组成 返回XML文件使用的编码 返回输入编码 返回XML文件声明中的standalone属性的值 返回XML文件声明中的version属性值 设置DocumenURI 设置XML的版本
DocumentBuilder builder = factory.newDocumentBuilder();
认识DOM解析器(3)
当获得一个builder对象(DOM解析器)之后,就可以调用该对象 的public Document parse(File file)方法来解析文件。解析的内容以对象的 形式返回,该对象是实现了Document接口的一个实例,称为Document 对nt节点代表了整个XML文件,XML文件的所有内容都被封 装在一个Document节点内。Document对象提供了对文档中数据进行访 问的入口,应用程序可以从该节点的子孙节点中获得整个XML文件的 数据。
Document类型节点的两个子节点类型是DocumentType类型和 Element类型。 Document节点常用的方法见下表:
节点类型 标记节点(Element) 属性节点(Attr) 文本节点(Text) CDATA节点(CDATASection) 对应的整数 1 2 3 4 表示常量 ELEMENT_NODE ATTRIBUTE_NODE TEXT_NODE CDATA_SECTION_NODE
实体引用节点(EntityReference)
认识DOM解析器(2)
(1)建立一个解析器工厂,利用这个工厂来获得一个具体的解析器 对象:
DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();
使用DocumentBuilderFacotry的目的是为了创建与具体解析器无关 的程序,当DocumentBuilderFactory类的静态方法newInstance()被调用 时,它根据一个系统变量来决定具体使用哪一个解析器。 (2)factory对象调用它的静态方法newDocumentBuilder()获得一个 DocumentBuilder对象,这个对象就是DOM解析器。
返回
NodeList接口
NodeList接口提供了对节点集合的抽象定义,用于表示有顺序关系 的一组节点。NodeList中的每一个节点都可以通过索引来访问,索引值 0表示第一个节点。NodeList接口有两个常用的方法,见下表: