- 浏览: 13992 次
最新评论
dom4j 是一种解析 XML 文档的开放源代码 XML 框架。本文介绍如何使用包含在 dom4j 中的解析器创建并修改 XML 文档。
dom4j API 包含一个解析 XML 文档的工具。本文中将使用这个解析器创建一个示例 XML 文档。清单 1 显示了这个示例 XML 文档,catalog.xml。 Java configuration with XML Schema Marcello Vitaletti 然后使用同一个解析器修改 catalog.xml,清单 2 是修改后的 XML 文档,catalog-modified.xml。 Create flexible and extensible XML schemas Ayesha Malik 与 W3C DOM API 相比,使用 dom4j 所包含的解析器的好处是 dom4j 拥有本地的 XPath 支持。DOM 解析器不支持使用 XPath 选择节点。
本文包括以下几个部分:
??预先设置
??创建文档
??修改文档
预先设置
这个解析器可以从 http://dom4j.org 获取。通过设置使 dom4j-1.4/dom4j-full.jar 能够在 classpath 中访问,该文件中包括 dom4j 类、XPath 引擎以及 SAX 和 DOM 接口。如果已经使用了 JAXP 解析器中包含的 SAX 和 DOM 接口,向 classpath 中增加 dom4j-1.4/dom4j.jar 。 dom4j.jar 包括 dom4j 类和 XPath 引擎,但是不含 SAX 与 DOM 接口。
创建文档
本节讨论使用 dom4j API 创建 XML 文档的过程,并创建示例 XML 文档 catalog.xml。
使用 import 语句导入 dom4j API 类: import java.io.*; import java.util.regex.*; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; 使用 DocumentHelper 类创建一个文档实例。 DocumentHelper 是生成 XML 文档节点的 dom4j API 工厂类。 Java代码 type="application/x-shockwave-flash" width="14" height="15" src="http://flex-java-oracle.javaeye.com/javascrip ts/syntaxhighlighter/clipboard_new.swf" pluginspage="http://www.macromedia.com/go/getflash player" allowscriptaccess="always" quality="high" flashvars="clipboard=Document%20document%20%3D%20D ocumentHelper.createDocument()%3B%20">
使用 addElement() 方法创建根元素 catalog 。 addElement() 用于向 XML 文档中增加元素。 Java代码 type="application/x-shockwave-flash" width="14" height="15" src="http://flex-java-oracle.javaeye.com/javascrip ts/syntaxhighlighter/clipboard_new.swf" pluginspage="http://www.macromedia.com/go/getflash player" allowscriptaccess="always" quality="high" flashvars="clipboard=Element%20catalogElement%20%3 D%20document.addElement(%22catalog%22)%3B%20">
在 catalog 元素中使用 addComment() 方法添加注释"An XML catalog"。 Java代码 type="application/x-shockwave-flash" width="14" height="15" src="http://flex-java-oracle.javaeye.com/javascrip ts/syntaxhighlighter/clipboard_new.swf" pluginspage="http://www.macromedia.com/go/getflash player" allowscriptaccess="always" quality="high" flashvars="clipboard=%20catalogElement.addComment( %22An%20XML%20catalog%22)%3B">
在 catalog 元素中使用 addProcessingInstruction() 方法增加一个处理指令。 Java代码 type="application/x-shockwave-flash" width="14" height="15" src="http://flex-java-oracle.javaeye.com/javascrip ts/syntaxhighlighter/clipboard_new.swf" pluginspage="http://www.macromedia.com/go/getflash player" allowscriptaccess="always" quality="high" flashvars="clipboard=catalogElement.addProcessingI nstruction(%22target%22%2C%22text%22)%3B%20">
在 catalog 元素中使用 addElement() 方法增加 journal 元素。 Java代码 type="application/x-shockwave-flash" width="14" height="15" src="http://flex-java-oracle.javaeye.com/javascrip ts/syntaxhighlighter/clipboard_new.swf" pluginspage="http://www.macromedia.com/go/getflash player" allowscriptaccess="always" quality="high" flashvars="clipboard=Element%20journalElement%20%3 D%20%20catalogElement.addElement(%22journal%22)%3B% 20">
使用 addAttribute() 方法向 journal 元素添加 title 和 publisher 属性。 Java代码 type="application/x-shockwave-flash" width="14" height="15" src="http://flex-java-oracle.javaeye.com/javascrip ts/syntaxhighlighter/clipboard_new.swf" pluginspage="http://www.macromedia.com/go/getflash player" allowscriptaccess="always" quality="high" flashvars="clipboard=journalElement.addAttribute(% 22title%22%2C%20%22XML%20Zone%22)%3B%0A%20%20%20%20 %20%20%20%20%20journalElement.addAttribute(%22publi sher%22%2C%20%22IBM%20developerWorks%22)%3B%20">
向 article 元素中添加 journal 元素。 Java代码 type="application/x-shockwave-flash" width="14" height="15" src="http://flex-java-oracle.javaeye.com/javascrip ts/syntaxhighlighter/clipboard_new.swf" pluginspage="http://www.macromedia.com/go/getflash player" allowscriptaccess="always" quality="high" flashvars="clipboard=Element%20articleElement%3Djo urnalElement.addElement(%22article%22)%3B%20">
为 article 元素增加 level 和 date 属性。 Java代码 type="application/x-shockwave-flash" width="14" height="15" src="http://flex-java-oracle.javaeye.com/javascrip ts/syntaxhighlighter/clipboard_new.swf" pluginspage="http://www.macromedia.com/go/getflash player" allowscriptaccess="always" quality="high" flashvars="clipboard=articleElement.addAttribute(% 22level%22%2C%20%22Intermediate%22)%3B%0A%20%20%20% 20%20%20articleElement.addAttribute(%22date%22%2C%2 0%22December-2001%22)%3B%20">
向 article 元素中增加 title 元素。 Java代码 type="application/x-shockwave-flash" width="14" height="15" src="http://flex-java-oracle.javaeye.com/javascrip ts/syntaxhighlighter/clipboard_new.swf" pluginspage="http://www.macromedia.com/go/getflash player" allowscriptaccess="always" quality="high" flashvars="clipboard=Element%20titleElement%3Darti cleElement.addElement(%22title%22)%3B">
使用 setText() 方法设置 article 元素的文本。 Java代码 type="application/x-shockwave-flash" width="14" height="15" src="http://flex-java-oracle.javaeye.com/javascrip ts/syntaxhighlighter/clipboard_new.swf" pluginspage="http://www.macromedia.com/go/getflash player" allowscriptaccess="always" quality="high" flashvars="clipboard=titleElement.setText(%22Java% 20configuration%20with%20XML%20Schema%22)%3B">
在 article 元素中增加 author 元素。 Java代码 type="application/x-shockwave-flash" width="14" height="15" src="http://flex-java-oracle.javaeye.com/javascrip ts/syntaxhighlighter/clipboard_new.swf" pluginspage="http://www.macromedia.com/go/getflash player" allowscriptaccess="always" quality="high" flashvars="clipboard=Element%20authorElement%3Dart icleElement.addElement(%22author%22)%3B%20">
在 author 元素中增加 firstname 元素并设置该元素的文本。 Java代码 type="application/x-shockwave-flash" width="14" height="15" src="http://flex-java-oracle.javaeye.com/javascrip ts/syntaxhighlighter/clipboard_new.swf" pluginspage="http://www.macromedia.com/go/getflash player" allowscriptaccess="always" quality="high" flashvars="clipboard=Element%20%20firstNameElement %3DauthorElement.addElement(%22firstname%22)%3B%0A% 20%20%20%20%20firstNameElement.setText(%22Marcello% 22)%3B%20">
在 author 元素中增加 lastname 元素并设置该元素的文本。 Java代码 type="application/x-shockwave-flash" width="14" height="15" src="http://flex-java-oracle.javaeye.com/javascrip ts/syntaxhighlighter/clipboard_new.swf" pluginspage="http://www.macromedia.com/go/getflash player" allowscriptaccess="always" quality="high" flashvars="clipboard=Element%20lastNameElement%3Da uthorElement.addElement(%22lastname%22)%3B%0A%20%20 %20%20%20lastNameElement.setText(%22Vitaletti%22)%3 B%20">
可以使用 addDocType() 方法添加文档类型说明。 Java代码 type="application/x-shockwave-flash" width="14" height="15" src="http://flex-java-oracle.javaeye.com/javascrip ts/syntaxhighlighter/clipboard_new.swf" pluginspage="http://www.macromedia.com/go/getflash player" allowscriptaccess="always" quality="high" flashvars="clipboard=document.addDocType(%22catalo g%22%2C%20null%2C%22file%3A%2F%2Fc%3A%2FDtds%2Fcata log.dtd%22)%3B%20">
这样就向 XML 文档中增加文档类型说明: Java代码 type="application/x-shockwave-flash" width="14" height="15" src="http://flex-java-oracle.javaeye.com/javascrip ts/syntaxhighlighter/clipboard_new.swf" pluginspage="http://www.macromedia.com/go/getflash player" allowscriptaccess="always" quality="high" flashvars="clipboard=%3C!DOCTYPE%20catalog%20SYSTE M%20%22file%3A%2F%2Fc%3A%2FDtds%2Fcatalog.dtd%22%3E %20">
如果文档要使用文档类型定义(DTD)文档验证则必须有 Doctype。
XML 声明 自动添加到 XML 文档中。
所示的例子程序 XmlDom4J.java 用于创建 XML 文档 catalog.xml import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.XMLWriter; import java.io.*; public class XmlDom4J{ public void generateDocument(){ Document document = DocumentHelper.createDocument(); Element catalogElement = document.addElement("catalog"); catalogElement.addComment("An XML Catalog"); catalogElement.addProcessingInstruction("target"," text"); Element journalElement = catalogElement.addElement("journal"); journalElement.addAttribute("title", "XML Zone"); journalElement.addAttribute("publisher", "IBM developerWorks"); Element articleElement=journalElement.addElement("article" ); articleElement.addAttribute("level", "Intermediate"); articleElement.addAttribute("date", "December-2001"); Element titleElement=articleElement.addElement("title"); titleElement.setText("Java configuration with XML Schema"); Element authorElement=articleElement.addElement("author"); Element firstNameElement=authorElement.addElement("firstna me"); firstNameElement.setText("Marcello"); Element lastNameElement=authorElement.addElement("lastname "); lastNameElement.setText("Vitaletti"); document.addDocType("catalog", null,"file://c:/Dtds/catalog.dtd"); try{ XMLWriter output = new XMLWriter( new FileWriter( new File("c:/catalog/catalog.xml") )); output.write( document ); output.close(); } catch(IOException e){System.out.println(e.getMessage());} } public static void main(String[] argv){ XmlDom4J dom4j=new XmlDom4J(); dom4j.generateDocument(); }} SAXReader 包含在 org.dom4j.io 包中。
inputXml 是从 c:/catalog/catalog.xml 创建的 java.io.File。使用 XPath 表达式从 article 元素中获得 level 节点列表。如果 level 属性值是"Intermediate"则改为"Introductory"。 List list = document.selectNodes("//article/@level" ); Iterator iter=list.iterator(); while(iter.hasNext()){ Attribute attribute=(Attribute)iter.next(); if(attribute.getValue().equals("Intermediate")) attribute.setValue("Introductory"); } 获取 article 元素列表,从 article 元素中的 title 元素得到一个迭代器,并修改 title 元素的文本。 list = document.selectNodes("//article" ); iter=list.iterator(); while(iter.hasNext()){ Element element=(Element)iter.next(); Iterator iterator=element.elementIterator("title"); while(iterator.hasNext()){ Element titleElement=(Element)iterator.next(); if(titleElement.getText().equals("Java configuration with XML Schema")) titleElement.setText("Create flexible and extensible XML schema"); }} 通过和 title 元素类似的过程修改 author 元素。
清单 4 所示的示例程序 Dom4JParser.java 用于把 catalog.xml 文档修改成 catalog-modified.xml 文档。 import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.Attribute; import java.util.List; import java.util.Iterator; import org.dom4j.io.XMLWriter; import java.io.*; import org.dom4j.DocumentException; import org.dom4j.io.SAXReader; public class Dom4JParser{ public void modifyDocument(File inputXml){ try{ SAXReader saxReader = new SAXReader(); Document document = saxReader.read(inputXml); List list = document.selectNodes("//article/@level" ); Iterator iter=list.iterator(); while(iter.hasNext()){ Attribute attribute=(Attribute)iter.next(); if(attribute.getValue().equals("Intermediate")) attribute.setValue("Introductory"); } list = document.selectNodes("//article/@date" ); iter=list.iterator(); while(iter.hasNext()){ Attribute attribute=(Attribute)iter.next(); if(attribute.getValue().equals("December-2001")) attribute.setValue("October-2002"); } list = document.selectNodes("//article" ); iter=list.iterator(); while(iter.hasNext()){ Element element=(Element)iter.next(); Iterator iterator=element.elementIterator("title"); while(iterator.hasNext()){ Element titleElement=(Element)iterator.next(); if(titleElement.getText().equals("Java configuration with XML Schema")) titleElement.setText("Create flexible and extensible XML schema"); } } list = document.selectNodes("//article/author" ); iter=list.iterator(); while(iter.hasNext()){ Element element=(Element)iter.next(); Iterator iterator=element.elementIterator("firstname"); while(iterator.hasNext()){ Element firstNameElement=(Element)iterator.next(); if(firstNameElement.getText().equals("Marcello")) firstNameElement.setText("Ayesha"); } } list = document.selectNodes("//article/author" ); iter=list.iterator(); while(iter.hasNext()){ Element element=(Element)iter.next(); Iterator iterator=element.elementIterator("lastname"); while(iterator.hasNext()){ Element lastNameElement=(Element)iterator.next(); if(lastNameElement.getText().equals("Vitaletti")) lastNameElement.setText("Malik"); } } XMLWriter output = new XMLWriter( new FileWriter( new File("c:/catalog/catalog-modified.xml") )); output.write( document ); output.close(); } catch(DocumentException e) { System.out.println(e.getMessage()); } catch(IOException e){ System.out.println(e.getMessage()); } } public static void main(String[] argv){ Dom4JParser dom4jParser=new Dom4JParser(); dom4jParser.modifyDocument(new File("c:/catalog/catalog.xml")); } } 这一节说明了如何使用 dom4j 中的解析器修改示例 XML 文档。这个解析器不使用 DTD 或者模式验证 XML 文档。如果 XML 文档需要验证,可以解释用 dom4j 与 JAXP SAX 解析器。
包含在 dom4j 中的解析器是一种用于解析 XML 文档的非验证性工具,可以与JAXP、Crimson 或 Xerces 集成。本文说明了如何使用该解析器创建和修改 XML 文档。
发表评论
-
DEMO:字符串反转
2012-07-06 09:52 718这个例子主要是让用户输入的字符串反转之后显示出来,主要是用 ... -
用正则表达式做内容关键字链接
2012-07-06 09:46 685private void rc() { strin ... -
基于ASP.NET的JQueryUI控件开发(1) - JQueryScriptManager
2012-07-06 09:30 389前面基本实现了ASP.NET MVC的 JQueryUI控 ... -
Javascript模式- 命令模式(Command)
2012-07-05 20:45 749前言 博客园谈设计 ... -
自定义android RadioPreference组件
2012-07-03 13:44 1390今天用到了android的preferences组件,可是 ... -
flex4 设置 圆角
2012-07-02 12:51 858height="100%" left= ... -
flex AS中TabNavigator子项后报超出索引 commitProperties解决
2012-07-02 12:51 542height="200" > ... -
Event propagation事件传播
2012-07-02 12:51 788当事件被触发时,F ... -
flex 给DataGrid每行加上tooltip
2012-07-02 12:51 690在初始化时加上tooltip的字体大小 mx.sty ... -
Flex4自定义事件类型Event的相关应用
2012-07-01 10:18 762基于松耦合的概念 自定义事件类型将取到很重要的作用 当您 ... -
flex学习-----事件机制的工作流程
2012-07-01 10:18 8388.2 事件机制的工作流程 8.2.1 关于事件流 ... -
Flex事件机制一
2012-07-01 10:17 770一:事件流机制 由于OOP编程将程序看成一个个对象、 ... -
Flex FTP文件上传
2012-07-01 10:17 660Flex FTP文件上传原理就是利用Flex Socket ... -
使用Flex实现FTP文件上传功能
2012-07-01 10:17 953最近需要使用Flex实现Ftp文件上传功能,Google到 ... -
未来的移动游戏
2012-06-30 16:43 595未来的移动游戏 2011年07月14日 手机游戏是娱乐 ... -
游戏战歌网 仿soso音乐 flex播放器
2012-06-30 16:42 750游戏战歌网 仿soso音乐 flex播放器 2010年08月 ... -
Flash游戏开发技术分析
2012-06-30 16:42 661Flash游戏开发技术分析 2010年12月31日 1、 ... -
FLEX和Actionscript开发FLASH游戏 3-2
2012-06-30 16:42 361FLEX和Actionscript开发FLASH游戏 3-2 ...
相关推荐
org.dom4j Defines the XML Document Object Model in Java interfaces together with some helper classes. org.dom4j.bean An implementation of the dom4j API which allows JavaBeans to be used to store and ...
dom4j和jdom 的jar包,版本分别为:dom4j-1.6.1,jdom-2.0.5,需要的拿走。
基于DOM4j和POI实现的XML文件转换为XLS(即标准EXCEL)的JAVA程序
解开后其中有三个包,分别是dom4j-1.6.1.jar以及jaxen-1.1.1.jar和 saxpath.jar,还有一个dom4j的使用指南。仅操作XML文档的话把dom4j-1.6.1.jar加入工程就可以了,如果需要使用XPath的话还需要加入包jaxen-1.1-beta-7...
Java XML编程常用的工具包Dom4j的详细用法,API文档、示例。
dom4j-1.6.1.jar,Dom4j是一个Java的XML API接口,是jdom的进化版,dom4j基本用来读写xml文件,是一个十分优秀的JavaXML API接口,马上下载dom4jJar吧。 dom4j-1.6.1.jar文件简介 Dom4j是一个Java的XML API,是jdom的...
dom4j 目录的介绍: 1)docs 是文档目录 2)如何查 Dom4j 的文档 3)Dom4j 快速入门 2)lib 目录 3)src 目录是第三方类库的源码目录: 可进我的博客看文章 javaweb-05xml 第三节部分 早期 JDK 为我们提供了两种 ...
dom4j解析xml所需jar包包含两个如果只导入dom4j编程过程中会报java.lang.IllegalStateException异常,需要添加jaxen版本的jar包
JDOM是一种使用 XML 的独特 Java 工具包,用于快速开发 XML 应用程序。
dom4j的使用教程,里面包括了java编程的部分例子。
编写的一个基于UDP和TCP的Socket编程文件传输,UDP用来实现消息传递,TCP用来文件传输,使用DOM4J来进行XML的读写。代码清晰,希望大家喜欢。
* 如果会用到多个值,可使用此方法获得一个map,然后根据键值对取值,会使程序性能更好一些 * 如果只会用的map中的一个值,则可调用此方法下面的方法 * @param xml * @return */ public static void ...
基于Java Swing和DOM4J的购物管理系统是一款基于Java语言开发的图形化应用程序,用于管理和展示商品信息、订单信息和用户信息等。该系统采用MVC架构,使用Java Swing编写用户界面,使用DOM4J解析和操作XML文件存储...
java操作xml文件,源码案例中实现了对xml文件的增、删、改、查等功能,可以用来开发一些工具,如hibernate就用到了dom4j。 我本人也用dom4j做过读取项目数据库xml配置文件的功能,增加了项目的可移植性、并且方便...
使用dom4j高效率xml解析,内涵demo程序,idea导入即可运行,适用于各种复杂xml的解析,给自己留作备份,有需要可下载。
这个架包非常稳定灵活,并且简单易用,在java编程中需要解析xml文件时首选架包
一个简单的有注释有讲解的小程序,给出了创建xml文件的例子
Java mysql-connector-java-5.0.4-bin.jar dom4j-1.6.1.jar等类库打包下载,主要是以下几款类库的打包下载:commons-httpclient-3.0.1.jar、dom4j-1.6.1.jar、jaxen-1.1-beta-6.jar、mysql-connector-java-5.0.4-bin...
SOAP 正成为Web 编程世界最炙手可热的概念,而且还是席 卷最新一代Web 开发的Web 服务热潮的组成部分。如果你听说过微软的.NET 计划 或P2P(peer-to-peer,对等网)革命,一定也听说了这些技术是以SOAP 为基础的 ...
xml数据前后台解析;提供了两种方式:dom4j与jdom对xml文件、xml字符串的读与写操作;同时实现在前台用jquery解析xml,将数据展示在页面上,程序可以跑