通过这个标签,我就将该页面的所有代码编码了。有趣的是所有的自定义标签都是在服务器上处理的。这意味着你将不会在输出的页面上看到自定义的标签。 建立一个标签不是很难吧。最困难的部分是要学习标签处理的所有细节。这是一个很强大的功能,我们只是提到了最基本的地方。由于这个处理需要几步,新的JSP编程者在创建标签时将会感到迷惑。 如何利用JSP开发DOM应用? DOM是Document Object Model的缩写,即文档对象模型。XML将数据组织为一颗树,所以DOM就是对这颗树的一个对象描叙。通俗的说,就是通过解析XML文档,为XML文档在逻辑上建立一个树模型,树的节点是一个个对象。我们通过存取这些对象就能够存取XML文档的内容。 下面我们来看一个简单的例子,看看在DOM中,我们是如何来操作一个XML文档的。这是一个XML文档,也是我们要操作的对象: <?xml version="1.0" encoding="UTF-8"?> <messages> <message>Good-bye serialization, hello Java!</message> </messages> 下面,我们需要把这个文档的内容解析到一个个的Java对象中去供程序使用,利用JAXP,我们只需几行代码就能做到这一点。首先,我们需要建立一个解析器工厂,以利用这个工厂来获得一个具体的解析器对象: DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 我们在这里使用DocumentBuilderFacotry的目的是为了创建与具体解析器无关的程序,当DocumentBuilderFactory类的静态方法newInstance()被调用时,它根据一个系统变量来决定具体使用哪一个解析器。又因为所有的解析器都服从于JAXP所定义的接口,所以无论具体使用哪一个解析器,代码都是一样的。所以当在不同的解析器之间进行切换时,只需要更改系统变量的值,而不用更改任何代码。这就是工厂所带来的好处。 DocumentBuilder db = dbf.newDocumentBuilder(); 当获得一个工厂对象后,使用它的静态方法newDocumentBuilder()方法可以获得一个DocumentBuilder对象,这个对象代表了具体的DOM解析器。但具体是哪一种解析器,微软的或者IBM的,对于程序而言并不重要。 然后,我们就可以利用这个解析器来对XML文档进行解析了: Document doc = db.parse("c:/xml/message.xml"); DocumentBuilder的parse()方法接受一个XML文档名作为输入参数,返回一个Document对象,这个Document对象就代表了一个XML文档的树模型。以后所有的对XML文档的操作,都与解析器无关,直接在这个Document对象上进行操作就可以了。而具体对Document操作的方法,就是由DOM所定义的了。 从得到的Document对象开始,我们就可以开始我们的DOM之旅了。使用Document对象的getElementsByTagName()方法,我们可以得到一个NodeList对象,一个Node对象代表了一个XML文档中的一个标签元素,而NodeList对象,观其名而知其意,所代表的是一个Node对象的列表: NodeList nl = doc.getElementsByTagName("message"); 我们通过这样一条语句所得到的是XML文档中所有<message>标签对应的Node对象的 一个列表。然后,我们可以使用NodeList对象的item()方法来得到列表中的每一个Node对象: Node my_node = nl.item(0); 当一个Node对象被建立之后,保存在XML文档中的数据就被提取出来并封装在这个Node中了。在这个例子中,要提取Message标签内的内容,我们通常会使用Node对象的getNodeValue()方法: String message = my_node.getFirstChild().getNodeValue(); 请注意,这里还使用了一个getFirstChild()方法来获得message下面的第一个子Node对象。虽然在message标签下面除了文本外并没有其它子标签或者属性,但是我们坚持在这里使用getFirseChild()方法,这主要和W3C对DOM的定义有关。W3C把标签内的文本部分也定义成一个Node,所以先要得到代表文本的那个Node,我们才能够使用getNodeValue()来获取文本的内容。现在,既然我们已经能够从XML文件中提取出数据了,我们就可以把这些数据用在合适的地方,来构筑应用程序。 DOM实例 先说说这个例子到底要做的是什么吧,我们在一个名为link.xml文件中保存了一些URL地址,我们希望可以通过DOM把这些URL读出并显示出来,也可以反过来向这个XML文件中写入加入的URL地址。很简单,却很实用,也足够来例示DOM的绝大部分用法了。 第一个程序我们称为xmldisplay.Java,主要的功能就是读取这个XML文件中各个节点的内容,然后在格式化输出在System.out上,我们来看看这个程序: import Javax.xml.parsers.*; import org.w3c.dom.*; 这是引入必要的类,因为在这里使用的是Sun所提供的XML解析器,因而需要引入Java.xml.parsers包,其中包含了有DOM解析器和SAX解析器的具体实现。org.w3c.dom包中定义了w3c所制定的DOM接口。 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder=factory.newDocumentBuilder(); Document doc=builder.parse("links.xml"); doc.normalize(); |