好文档 - 专业文书写作范文服务资料分享网站

XML&XMLR 的解析器

天下 分享 时间: 加入收藏 我要投稿 点赞

金桥JAVA软件工程师教育系列教程

程序的第一行创建了一个空的DOM对象。第二行通过document.load()方法把我们的数据文件引入到DOM对象中。最后,在最后一行用一个很长的命令去访问第一航班的航线的节点并改变其中属于\美洲航空公司\的节点的内容。这一切是通过childNodes属性实现的,它使我们可以通过一个数字索引来访问某个子节点.DOM还提供了很多其他的方法让我们可以通过名称或其他属性来访问节点。

上面的例子显然很一般,不过它很好地向我们展示了有关DOM的程序是个什么样子。如果你想用XML进行一些工作,就必须要了解DOM,同时还要学会如何操作、访问文档对象树。

第二部分XML在JAVA中的应用

1.1 解析器基础

解析器实际就是一段代码,它读入一个XML文档并分析其结构。我们在这里介绍的是基于Java 的解析器。

目前主流的解析器有:JAXP(Java API for XML Processing)、Xerces(Apache)和 XML4J(IBM)。主流的解析器都支持SAX2和DOM2 ,并很快将支持DOM3 。

解析器可以按以下标准进行分类 :校验的和不校验的解析器。 我们知道,使用一个DTD并遵循DTD定义规则的XML文档称为有效文档。遵循基本标记规则的XML文档称为格式良好的文档。XML规范要求解析器一旦发现文档不是格式良好的就立刻报告错误。而不校验的解析器忽略所有的效验错误,即不检查DTD中的规则。

如此一来,其处理速度和效率就比校验的解析器高得多。因此如果确信XML文档是有效的,就可以使用不校验的解析器;或者如果只关心找到文档中的标记,那么也可以选用不校验的解析器。

支持DOM解析器

DOM是W3C的官方标准,它定义了一个接口,使程序能访问和更新XML文档的样式、结构和内容。支持DOM的解析器实现了这一接口。使用一个DOM解析器,可以得到一个包含文档中所有元素的树结构。

支持SAX的解析器

SAX是处理XML内容的另一种方式,由XML-DEV邮件列表的成员开发,它已经是事实上的工业标准。使用SAX解析XML文档,解析器将在文档的不同点产生事件。这些点包括文档的起点和终点,以及在元素中发现字符时,应用程序可以决定如何处理这些事件以及从解析器得到的信息。

1.2 DOM基础

DOM是Document Object Model 的缩写,即文档对象模型。XML将数据组织为一棵树DOM就是对这棵树的一个对象描述。通俗的说,就通过解析XML文档,为XML文档在逻辑上建立一个树模型,树的节点是一个个对象,通过存取这些对象就能够存取XML文档的内容。

DOM的基本对象包括:Document、Node、NodeList、Element和Attr等。 Document

11

金桥JAVA软件工程师教育系列教程

Document对象代表了整个XML的文档,所有其他的对象,都以一定的顺序包括在Document对象之内,排列成一个树形结构,可以通过遍历这棵树来得到XML文档的所有的内容,这也是对XML文档操作的起点。此外,Document 还包含了创建其他对象的方法。 Node

Node对象是DOM结构中最基本的对象,代表了文档树中的一个抽象的节点。在实际使用的时候,很少用到Node对象,而是使用 Element、Attr等Node对象的子对象来操作文档。Node对象为这些对象提供了一个抽象的、公共的根。虽然在Node对象的子对象中定义了对其子节点进行存取的方法,但是有一些Node子对象并不存在子节点。 NodeList

NodeList对象是包含了一个或多个Node的列表。可以把它看成一个Node的数组,我们可以通过相应的方法获得列表中的元素。 Element

Element对象代表的是XML文档中的标签元素,继承自Node,是Node的最主要的子对象。在标签中可以包含有属性。

下面我们通过一个简单的例子学习如何使用DOM来操作一个XML文档。我们将用到javax.xml.parsers包和org.w3c.dom包中相关的类。

Tony Blair

10 Downing Street,London,UK
(061)98765 (061)98765 blair@everywhere.com

Bill Clinton

White House,USA
(001)6400 98765 (001)6400 98765 bill@everywhere.com

Tom Cruise

57 Jumbo Street,New York,USA
(001)4500 67859 (001)4500 67859 cruise@everywhere.com

Linda Goodman

78 Crax Lane,London,UK

12

金桥JAVA软件工程师教育系列教程

(061)54 56789 (061)54 56789 linda@everywhere.com

首先,我们需要建立一个解析器工厂。

DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance(); 然后就可以利用这个工厂来获得一个具体的解析器对象。

DocumentBuilder builder=dbf.newDocumentBuilder();

DocumentBuilder的parse()方法接受一个XML文档名作为输入参数,返回一个Document对象。Document对象代表了一个XML文档的树模型。 Document doc=builder.parse(“candidate.xml”);

使用Document对象的getElementsByTagName()方法,我们可以得到一个NodeList对象,它是XML文档中的标签元素列表,可以使用NodeList对象的item()方法得到列表中的每一个Node对象。

NodeList nl=doc.getElementsByTagName(“PERSON”); Element node=(Element)nl.item(i);

最后,我们会通过Node对象的getNodeValue()方法提取某个标签的内容。 node.getElementsByTagName(“NAME”).item(0).getFirstChild().getNodeValue()。 完整的程序代码如下: import javax.xml.parsers.*; import org.w3c.dom.*; public class dom{ public static void main(String args[]){ try{ System.out.println(node.getElementsByTagName(\ System.out.println(node.getElementsByTagName(\ System.out.println(node.getElementsByTagName(\ System.out.print(\ System.out.print(\ System.out.print(\DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder builder=factory.newDocumentBuilder(); Document doc=builder.parse(\NodeList nl=doc.getElementsByTagName(\for(int i=0;i

金桥JAVA软件工程师教育系列教程

} } System.out.println(node.getElementsByTagName(\ System.out.println(node.getElementsByTagName(\ } } e.printStackTrace(); System.out.println(); System.out.print(\}catch(Exception e){ Sql.xml localhost 1433 mvc sa com.microsoft.jdbc.sqlserver.SQLServerDriver jdbc:microsoft:sqlserver:// : ;DatabaseName= XML_SQL_BEAN.java package SQLBean; import javax.xml.parsers.*; import org.w3c.dom.*; import java.sql.*; public class XML_SQL_BEAN { String url; String cfn; String ip; String port; String dbn; String dbname; String use; 14

金桥JAVA软件工程师教育系列教程

String pass; String temp; Connection con=null; Statement sta=null; public XML_SQL_BEAN() throws Exception { dbname=node.getElementsByTagName(\ cfn=node.getElementsByTagName(\ dbn=node.getElementsByTagName(\ } Statement getStatement() } Class.forName(cfn); con=DriverManager.getConnection(url+ip+temp+port+dbn+dbname,use,pass); sta=con.createStatement(); break; url=node.getElementsByTagName(\temp=node.getElementsByTagName(\ } nl=doc.getElementsByTagName(\for(int i=0;i

XML&XMLR 的解析器

金桥JAVA软件工程师教育系列教程程序的第一行创建了一个空的DOM对象。第二行通过document.load()方法把我们的数据文件引入到DOM对象中。最后,在最后一行用一个很长的命令去访问第一航班的航线的节点并改变其中属于\美洲航空公司\的节点的内容。这一切是通过childNodes属性实现的,它使我们可以通过一个数字索引来访问某个子节点.DOM还提供了很多其他的方法让
推荐度:
点击下载文档文档为doc格式
4oy1i5hj4h47ty70k2aj
领取福利

微信扫码领取福利

微信扫码分享