JavaconfigurationwithXMLSchemaMarcelloVitaletti然后使用同一个解析器修改catalog.xml,清单2是修改后的XML文档,catalog-modified.xml。清单2.修改后的XML文档(catalog-modified.xml)publisher="IBMdeveloperWorks">Createf" />
当前位置:文档之家› 使用 dom4j 解析 XML

使用 dom4j 解析 XML

使用 dom4j 解析 XML
使用 dom4j 解析 XML

publisher="IBM developerWorks">

Java configuration with XML Schema

Marcello

Vitaletti

然后使用同一个解析器修改catalog.xml,清单 2 是修改后的XML 文档,catalog-modified.xml。

清单2. 修改后的XML 文档(catalog-modified.xml)

publisher="IBM developerWorks">

Create flexible and extensible XML schemas

Ayesha

Malik

与W3C DOM API 相比,使用dom4j 所包含的解析器的好处是dom4j 拥有本地的XPath 支持。DOM 解析器不支持使用XPath 选择节点。

本文包括以下几个部分:

?预先设置

?创建文档

?修改文档

预先设置

这个解析器可以从https://www.doczj.com/doc/b73026073.html,获取。通过设置使

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 org.dom4j.Document;

import org.dom4j.DocumentHelper;

import org.dom4j.Element;

使用DocumentHelper类创建一个文档实例。DocumentHelper是生成XML 文档节点的dom4j API 工厂类。

Document document = DocumentHelper.createDocument();

使用addElement()方法创建根元素catalog。addElement()用于向XML 文档中增加元素。

Element catalogElement = document.addElement("catalog");

在catalog元素中使用addComment()方法添加注释“An XML catalog”。

catalogElement.addComment("An XML catalog");

在catalog元素中使用addProcessingInstruction()方法增加一个处理指令。

catalogElement.addProcessingInstruction("target","text");

在catalog元素中使用addElement()方法增加journal元素。

Element journalElement = catalogElement.addElement("journal");

使用addAttribute()方法向journal元素添加title和publisher属性。

journalElement.addAttribute("title", "XML Zone");

journalElement.addAttribute("publisher", "IBM developerWorks");

向article元素中添加journal元素。

Element articleElement=journalElement.addElement("article");

为article元素增加level和date属性。

articleElement.addAttribute("level", "Intermediate");

articleElement.addAttribute("date", "December-2001");

向article元素中增加title元素。

Element titleElement=articleElement.addElement("title");

使用setText()方法设置article元素的文本。

titleElement.setText("Java configuration with XML Schema");

在article元素中增加author元素。

Element authorElement=articleElement.addElement("author");

在author元素中增加firstname元素并设置该元素的文本。

Element firstNameElement=authorElement.addElement("firstname"); firstNameElement.setText("Marcello");

在author元素中增加lastname元素并设置该元素的文本。

Element lastNameElement=authorElement.addElement("lastname");

lastNameElement.setText("Vitaletti");

可以使用addDocType() 方法添加文档类型说明。

document.addDocType("catalog", null,"file://c:/Dtds/catalog.dtd");

这样就向XML 文档中增加文档类型说明:

如果文档要使用文档类型定义(DTD)文档验证则必须有Doctype。

XML 声明自动添加到XML 文档中。清单3 所示的例子程序XmlDom4J.java 用于创建XML 文档catalog.xml。

清单3. 生成XML 文档catalog.xml 的程序(XmlDom4J.java)

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("firstname"); 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();

}}

这一节讨论了创建XML 文档的过程,下一节将介绍使用dom4j API 修改这里创建的XML 文档。

修改文档

这一节说明如何使用dom4j API 修改示例XML 文档catalog.xml。

使用SAXReader 解析XML 文档catalog.xml:

SAXReader saxReader = new SAXReader();

Document document = saxReader.read(inputXml);

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 文档。

清单4. 用于修改catalog.xml 的程序(Dom4Jparser.java)

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 文档。

参考资料

?您可以参阅本文在developerWorks 全球站点上的英文原文.

?请访问dom4j Web 站点,那里有一个很有用的FAQ。

?阅读https://www.doczj.com/doc/b73026073.html, 上的文章“dom4j: the flexible XML framework for Java”。

?通过Dennis Sosnoski 的developerWorks文章“文档模型,第一部分:性能”

(2001 年9 月)和“Java 文档模型的用法”(2002 年 2 月)进一步研究

dom4j。

?通过Elliotte Rusty Harold 的“Processing XML with Java”了解如何编制读写XML 文档的Java 程序。

?在developerWorks XML和Web 服务专区可以找到更多的XML 资源。也可以订阅每周一期的Web 服务/XML 技巧新闻邮件。

?在developerWorks Developer Bookstore可以找到各种关于XML 的书籍。?了解如何才能成为一名IBM 认证的XML 及相关技术的开发人员。

Dom4j遍历解析XML测试

Dom4j遍历解析XML测试 近来老和XML打交道,不深挖不行了。。 这是一个Dom4j解析XML的例子,为做复杂递归处理前期所写的例子。涵盖了XML的解析方面大部分核心API。 环境: Dom4j-1.6.1 Dom4j解析需要XML需要的最小类库为: dom4j-1.6.1.jar jaxen-1.1-beta-6.jar 目标: 解析一个xml,输出所有的属性和元素值。 测试代码: XML文件: zhangsan 32 home add com add lisi 22 home add com add com add

解析代码: package com.topsoft.test; import org.dom4j.io.SAXReader; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.Node; import java.util.Iterator; import java.util.List; import java.io.InputStream; /** * Created by IntelliJ IDEA.
* User: leizhimin
* Date: 2008-3-26 15:53:51
* Note: Dom4j遍历解析XML测试 */ public class TestDom4j { /** * 获取指定xml文档的Docum ent对象,xml文件必须在classpath中可以找到 * * @param xmlFilePath xml文件路径 * @return Document对象 */ public static Docum ent parse2Document(String xmlFilePath) { SAXReader reader = new SAXReader(); Docum ent docum ent = null; try { InputStream in =TestDom4j.class.getResourceAsStream(xmlFilePath); docum ent =reader.read(in); } catch (Docum entException e) { System.out.println(e.getMessage()); System.out.println("读取classpath下xmlFileName文件发生异常,请检查CL ASSPATH和文件名是否存在!"); e.printStackTrace(); }

java_Dom4j解析XML详解

学习:Dom4j 1、DOM4J简介 DOM4J是https://www.doczj.com/doc/b73026073.html, 出品的一个开源XML 解析包。DOM4J应用于Java 平台,采用了Java 集合框架并完全支持DOM,SAX 和JAXP。 DOM4J 使用起来非常简单。只要你了解基本的XML-DOM 模型,就能使用。 Dom:把整个文档作为一个对象。 DOM4J 最大的特色是使用大量的接口。它的主要接口都在org.dom4j里面定义:

接口之间的继承关系如下: interface https://www.doczj.com/doc/b73026073.html,ng.Cloneable interface org.dom4j.Node interface org.dom4j.Attribute interface org.dom4j.Branch interface org.dom4j.Document interface org.dom4j.Element interface org.dom4j.CharacterData interface org.dom4j.CDATA interface https://www.doczj.com/doc/b73026073.html,ment interface org.dom4j.Text interface org.dom4j.DocumentType interface org.dom4j.Entity interface org.dom4j.ProcessingInstruction 2、XML文档操作1 2.1、读取XML文档: 读写XML文档主要依赖于org.dom4j.io包,有DOMReader和SAXReader两种方式。因为利用了相同的接口,它们的调用方式是一样的。 public static Docum ent load(String filenam e) { Document docum ent =null; try { SAXReader saxReader = new SAXReader(); docum ent =saxReader.read(new File(filename)); //读取XML文件,获得docum ent 对象 } catch (Exception ex) { ex.printStackTrace();

DOM4j学习

DOM4j学习 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM develo perWorks上面可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。如今你可以看到越来越多的J ava软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用d om4j。这是必须使用的jar包,Hibernate用它来读写配置文件。 概念 DOM4J是https://www.doczj.com/doc/b73026073.html,出品的一个开源XML解析包,它的网站中这样定义: Dom4j is an easy to use, open source library for working with XML, XP ath and XSLT on the Java platform using the Java Collections Framework a nd with full support for DOM, SAX and JAXP. Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java 平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。 DOM4J使用起来非常简单。只要你了解基本的XML-DOM模型,就能使用。然而他自己带的指南只有短短一页(html),不过说的到挺全。国内的中文资料很少。因而俺写这个短小的教程方便大家使用,这篇文章仅谈及基本的用法,如需深入的使用,请……自己摸索或查找别的资料。 之前看过IBM developer社区的文章(参见附录),提到一些XML解析包的性能比较,其中DOM4J的性能非常出色,在多项测试中名列前茅。(事实上DOM4J 的官方文档中也引用了这个比较)所以这次的项目中我采用了DOM4J作为XML解析工具。 在国内比较流行的是使用JDOM作为解析器,两者各擅其长,但DOM4J最大的特色是使用大量的接口,这也是它被认为比JDOM灵活的主要原因。大师不是说过么,“面向接口编程”。目前使用DOM4J的已经越来越多。如果你善于使用JDOM,不妨继续用下去,只看看本篇文章作为了解与比较,如果你正要采用一种解析器,不如就用DOM4J吧。 它的主要接口都在org.dom4j这个包里定义: Attribute Attribute定义了XML的属性 Branch Branch为能够包含子节点的节点如XML元素(Element)和文档(Docuem nts)定义了一个公共的行为, CDATA CDATA 定义了XML CDATA 区域 CharacterData CharacterData是一个标识借口,标识基于字符的节点。如CD ATA,Comment, Text. Comment Comment 定义了XML注释的行为

XML报文解析测试

XML报文解析测试 在平时工作中,难免会遇到把 XML 作为数据存储格式。面对目前种类繁多的解决方案,哪个最适合我们呢?在这篇文章中,我对这四种主流方案做一个不完全评测,仅仅针对遍历 XML 这块来测试,因为遍历 XML 是工作中使用最多的(至少我认为)。 预备 测试环境: AMD 毒龙1.4G OC 1.5G、256M DDR333、Windows2000 Server SP4、Sun JDK 1.4.1+Eclipse 2.1+Resin 2.1.8,在 Debug 模式下测试。 XML 文件格式如下: <?xml version="1.0" encoding="GB2312"?> <RESULT> <VALUE> <NO>A1234</NO> <ADDR>四川省XX县XX镇XX路X段XX号</ADDR> </VALUE> <VALUE> <NO>B1234</NO> <ADDR>四川省XX市XX乡XX村XX组</ADDR> </VALUE> </RESULT> 测试方法: 采用 JSP 端调用Bean(至于为什么采用JSP来调用,请参考: https://www.doczj.com/doc/b73026073.html,/rosen/archive/2004/10/15/138324.aspx),让每一种方案分别解析10K、100K、1000K、10000K的 XML 文件,计算其消耗时间(单位:毫秒)。 JSP 文件: <%@ page contentType="text/html; charset=gb2312" %> <%@ page import="com.test.*"%> <html> <body> <% String args[]={""}; MyXMLReader.main(args); %>

利用反射与dom4j读取javabean生成对应XML和读取XML得到对应的javabean对象集合

首先实现生成对应的JAVAbean的XML文件方法 /** * DMO4J写入XML * @param obj 泛型对象 * @param entityPropertys 泛型对象的List集合 * @param Encode XML自定义编码类型(推荐使用GBK) * @param XMLPathAndName XML文件的路径及文件名 */ publicvoid writeXmlDocument(T obj, List entityPropertys, String Encode, String XMLPathAndName) { long lasting = System.currentTimeMillis();//效率检测 try { XMLWriter writer = null;// 声明写XML的对象OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding(Encode);// 设置XML文件的编码格式 String filePath = XMLPathAndName;//获得文件地址 File file = new File(filePath);//获得文件 if (file.exists()) {

file.delete(); } // 新建student.xml文件并新增内容 Document document = DocumentHelper.createDocument(); String rootname = obj.getClass().getSimpleName();//获得类名 Element root = document.addElement(rootname + "s");//添加根 节点 Field[] properties = obj.getClass().getDeclaredFields();//获得实体类的所有属性 for (T t : entityPropertys) { // 递归实体 Element secondRoot = root.addElement(rootname); //二级节点 for (int i = 0; i < properties.length; i++) { //反射get方法 Method meth = t.getClass().getMethod( "get" + properties[i].getName().substring(0, 1) .toUpperCase() + properties[i].getName().substring(1)); //为二级节点添加属性,属性值为对应属性的值 secondRoot.addElement(properties[i].getName()).setText(

【黑马程序员】使用DOM4J+XPATH解析带有schema约束的XML文件

【黑马程序员】使用DOM4J+XPATH 解析带有schema 约束的XML 文件 当在XML 文件中引入了外部约束,使用了命名空间的时候,如果要使用DOM4J+XPATH 解析XML 文件 可能会出现解析不到节点内容的问题,下面给出一种解决办法。 【步骤一】准备XML 文件和约束文件 XML 文件(aaa.xml ,该文件放置在src 目录下): 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 名称1 1992-11-09 名称2 1999-03-03 约束文件(members.xsd ): 01 02 03 04 05 06 07 08 09 10 11

四种XML解析器比较

1.详解 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。 2)SAX SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。 而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。 选择DOM还是选择SAX?对于需要自己编写代码来处理XML文档的开发人员来说,选择DOM 还是SAX解析模型是一个非常重要的设计决策。 DOM采用建立树形结构的方式访问XML文档,而SAX采用的事件模型。 DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。 SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag.特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。 3)JDOM https://www.doczj.com/doc/b73026073.html, JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。正在考虑通过“Java规范请求JSR-102” 将它最终用作“Java标准扩展”。从2000年初就已经开始了JDOM开发。 JDOM与DOM主要有两方面不同。首先,JDOM仅使用具体类而不使用接口。这在某些方面简化了API,但是也限制了灵活性。第二,API大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的使用。 JDOM文档声明其目的是“使用20%(或更少)的精力解决80%(或更多)Java/XML问题”(根据学习曲线假定为20%)。JDOM对于大多数Java/XML应用程序来说当然是有用的,并且大多数开

XML的四种解析器(dom,sax,jdom,dom4j)原理及性能比较[收藏]

1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM 是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。 2)SAX SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。 选择DOM还是选择SAX?对于需要自己编写代码来处理XML文档的开发人员来说,选择DOM还是SAX解析模型是一个非常重要的设计决策。DOM 采用建立树形结构的方式访问XML文档,而SAX采用的事件模型。 DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然

后利用navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。 SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag。特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。 3)JDOM https://www.doczj.com/doc/b73026073.html,/ JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。正在考虑通过“Java规范请求JSR-102”将它最终用作“Java标准扩展”。从2000年初就已经开始了JDOM开发。 JDOM与DOM主要有两方面不同。首先,JDOM仅使用具体类而不使用接口。这在某些方面简化了API,但是也限制了灵活性。第二,API大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的使用。

四中最常用的XML文件解析总结

XML文件学习总结 掌握了XML文件解析的常用的4中方式:DOM解析、SAX 解析、STAX解析以及DOM4j解析XML文件。 一、DOM 解析xml文件 public List parse(String url) throws Exception{ // 1、创建解析工厂 D ocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//创建工厂是单例模式,不能直接new对象,需要调用newInstance来创建对象。 // 2、创建解析器 D ocumentBuilder builder = factory.newDocumentBuilder(); // 3、创建解析器的url F ile file = new File(url); // 4、得到解析后的Document对象 D ocument doncument = builder.parse(file); // 5、通过得到节点名字得到所有同名节点的集合NodeList N odeList nodeList = doncument.getElementsByTagName("student"); // 6、遍历NodeList集合 f or (int i = 0; i < nodeList.getLength(); i++) { // 得到每个节点对象 Node studentNode = nodeList.item(i); Student st = new Student(); NamedNodeMap map = studentNode.getAttributes(); //for(int j=0;j

dom4j api 详解

1、DOM4J简介 DOM4J是 https://www.doczj.com/doc/b73026073.html, 出品的一个开源 XML 解析包。DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和 JAXP。 DOM4J 使用起来非常简单。只要你了解基本的 XML-DOM 模型,就能使用。 Dom:把整个文档作为一个对象。 DOM4J 最大的特色是使用大量的接口。它的主要接口都在org.dom4j里面定义: Attribute定义了 XML 的属性。 Branch 指能够包含子节点的节点。如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为 CDATA定义了 XML CDATA 区域 CharacterData是一个标识接口,标识基于字符的节点。如CDATA,Comment, Text. Comment定义了 XML 注释的行为 Document定义了XML 文档 DocumentType定义 XML DOCTYPE 声明 Element定义XML 元素 ElementHandler定义了Element 对象的处理器 ElementPath被 ElementHandler 使用,用于取得当前正在处理的路径层次信息Entity定义 XML entity Node为dom4j中所有的XML节点定义了多态行为 NodeFilter定义了在dom4j 节点中产生的一个滤镜或谓词的行为(predicate)ProcessingInstruction定义 XML 处理指令 Text定义 XML 文本节点 Visitor用于实现 Visitor模式 XPath在分析一个字符串后会提供一个 XPath 表达式 接口之间的继承关系如下: interface https://www.doczj.com/doc/b73026073.html,ng.Cloneable interface org.dom4j.Node interface org.dom4j.Attribute interface org.dom4j.Branch interface org.dom4j.Document interface org.dom4j.Element interface org.dom4j.CharacterData interface org.dom4j.CDATA interface https://www.doczj.com/doc/b73026073.html,ment interface org.dom4j.Text interface org.dom4j.DocumentType

使用DOM4j解析xml文件

Xml文件: studentname 78 78 98 studentname 77 68 88 JAVA文件: import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Iterator; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; /** *DOM4j对xml文件的操作 *操作DOM4j的时候注意要导入3个jar包,否则会报异常 *dom4j-1.6.1.jar *jaxen-1.1-beta-6.jar *saxpath.jar **/ public class ReaderDom4j {

Java解析XML文件

Java解析XML文件 ========================================== xml文件 <?xml version="1.0" encoding="GB2312"?> <RESULT> <VALUE> <NO>A1234</NO> <ADDR>四川省XX县XX镇XX路X段XX号</ADDR> </VALUE> <VALUE> <NO>B1234</NO> <ADDR>四川省XX市XX乡XX村XX组</ADDR> </VALUE> </RESULT> ========================================== 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。 import java.io.*; import java.util.*; import org.w3c.dom.*; import javax.xml.parsers.*; public class MyXMLReader{ public static void main(String arge[]){ long lasting =System.currentTimeMillis(); try{ File f=new File("data_10k.xml"); DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder builder=factory.newDocumentBuilder(); Document doc = builder.parse(f); NodeList nl = doc.getElementsByT agName("VALUE"); for (int i=0;i<nl.getLength();i++){ System.out.print("车牌号码:" +

xml的四种解析方法及源代码

xml的四种解析方法及源代码(SAX、DOM、JDOM、DOM4J) 第一种:SAX解析 SAX处理机制:SAX是一种基于事件驱动的API。利用SAX解析XML文档,牵涉到两个部分:解析器和事件处理器。解析器负责读取XML文档,并向事件处理器发生事件,如元素开始和元素结束事件;而事件处理器则负责对事件做出响应,对传递的XML数据进行处理。 测试用的xml文件:db.xml Xml代码 oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:@localhost:1521:oracle scott tiger DTD文件db.dtd Xml代码

SAX解析实例一 org.xml.sax.DefalutHandler类: 可以扩展该类,给出自己的解析实现SAXPrinter.java Java代码 import java.io.File; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SAXPrinter extends DefaultHandler { /** *//** * 文档开始事件 */ public void startDocument() throws SAXException { System.out.println("");

java解析XML详解

详解Java解析XML的四种方法 XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object Model),DTD(Document Type Definition),SAX(Simple API for XML),XSD(Xml Schema Definition),XSLT(Extensible Stylesheet Language Transformations),具体可参阅w3c官方网站文档https://www.doczj.com/doc/b73026073.html,获取更多信息。 XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已。基本的解析方式有两种,一种叫SAX,另一种叫DOM。SAX是基于事件流的解析,DOM是基于XML文档树结构的解析。假设我们XML的内容和结构如下: ddviplinux m 30 本文使用JAVA语言来实现DOM与SAX的XML文档生成与解析。 首先定义一个操作XML文档的接口XmlDocument 它定义了XML文档的建立与解析的接口。 package com.alisoft.facepay.framework.bean; /** * * @author hongliang.dinghl * 定义XML文档建立与解析的接口 */ public interface XmlDocument { /** * 建立XML文档 * @param fileName 文件全路径名称 */ public void createXml(String fileName); /** * 解析XML文档 * @param fileName 文件全路径名称 */ public void parserXml(String fileName); } 1. DOM生成和解析XML文档 为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)。 import java.io.FileInputStream; import java.io.FileNotFoundException;

dom4j_API详解

dom4j API使用简介 功能简介 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。如今你可以看到越来越多的Java软件都在使用dom4j来读写XM L,特别值得一提的是连Sun的JAXM也在用dom4j。这是必须使用的jar包, Hibernate 用它来读写配置文件。 概念 DOM4J是https://www.doczj.com/doc/b73026073.html,出品的一个开源XML解析包,它的网站中这样定义: Dom4j is an easy to use, open source library for working with XML, XPath an d XSLT on the Java platform using the Java Collections Framework and with full support for DOM, SAX and JAXP. Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。 DOM4J使用起来非常简单。只要你了解基本的XML-DOM模型,就能使用。然而他自己带的指南只有短短一页(html),不过说的到挺全。国内的中文资料很少。因而俺写这个短小的教程方便大家使用,这篇文章仅谈及基本的用法,如需深入的使用,请……自己摸索或查找别的资料。 之前看过IBM developer社区的文章(参见附录),提到一些XML解析包的性能比较,其中DOM4J的性能非常出色,在多项测试中名列前茅。(事实上DOM4J的官方文档中也引用了这个比较)所以这次的项目中我采用了DOM4J作为XML解析工具。 在国内比较流行的是使用JDOM作为解析器,两者各擅其长,但DOM4J最大的特色是使用大量的接口,这也是它被认为比JDOM灵活的主要原因。大师不是说过么,“面向接口编程”。目前使用DOM4J的已经越来越多。如果你善于使用JDOM,不妨继续用下去,只看看本篇文章作为了解与比较,如果你正要采用一种解析器,不如就用DOM4J吧。 它的主要接口都在org.dom4j这个包里定义: Attribute Attribute定义了XML的属性 Branch Branch为能够包含子节点的节点如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为, CDATA CDATA 定义了XML CDATA 区域 CharacterData CharacterData是一个标识接口,标识基于字符的节点。如CDATA,Co mment, Text. Comment Comment 定义了XML注释的行为 Document 定义了XML文档 DocumentType DocumentType 定义XML DOCTYPE声明 Element Element定义XML 元素

java 解析xml 并导入数据库(dom4j )

java 解析xml 并导入数据库(dom4j ) import java.io.File; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.Iterator; import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class TestXMLImport { /** * @param args */ public static void main(String[] args) { String sql = "insert into T_XML(NUMERO, REPOSICION, NOMBRE, TURNOS) values (?, ?, ?, ?)"; Connection conn = null; PreparedStatement pstmt = null; try {

conn = DbUtil.getConnection(); pstmt = conn.prepareStatement(sql); Document doc = new SAXReader().read(new File("D:/share/JavaProjects/drp/test_xmlImport/xml/test01.XML ")); List itemList = doc.selectNodes("/ACCESOS/item/SOCIO"); for (Iterator iter=itemList.iterator(); iter.hasNext();) { Element el = (Element)iter.next(); String numero = el.elementText("NUMERO"); String reposicion = el.elementText("REPOSICION"); String nombre = el.elementText("NOMBRE"); List turnosList = el.elements("TURNOS"); StringBuffer sbString = new StringBuffer(); for (Iterator iter1=turnosList.iterator(); iter1.hasNext();) { Element turnosElt = (Element)iter1.next(); String lu = turnosElt.elementText("LU"); String ma = turnosElt.elementText("MA"); String mi = turnosElt.elementText("MI"); String ju = turnosElt.elementText("JU"); String vi = turnosElt.elementText("VI"); String sa = turnosElt.elementText("SA");

相关主题
文本预览
相关文档 最新文档