当前位置:文档之家› java 解析xml 并导入数据库(dom4j )

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

java 解析xml 并导入数据库(dom4j )
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");

String doo = turnosElt.elementText("DO");

sbString.append(lu + "," + ma + "," + mi + "," + ju + "," + vi + "," + sa + "," + doo);

}

pstmt.setString(1, numero);

pstmt.setString(2, reposicion);

pstmt.setString(3, nombre);

pstmt.setString(4, sbString.toString());

pstmt.addBatch();

}

pstmt.executeBatch();

System.out.println("将XML导入数据库成功!");

} catch (Exception e) {

e.printStackTrace();

} finally {

DbUtil.close(pstmt);

DbUtil.close(conn);

}

}

}

---------------------------------------------------------------------------------------------------------------------------------

00045050

0

MOISES MORENO

T1

T2

T3

T4

T5

T6

T7

00045051

0

RUTH PENA

S1S2S3S4S5 S6S7

1、

package myxml;

import javax.xml.parsers.*;

import org.w3c.dom.*;

import org.apache.crimson.tree.*;

import org.xml.sax.SAXException;

import java.io.*;

public class DomParserDemo{

private Document doc;

public DomParserDemo() throws Exception{

DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

DocumentBuilder builder=factory.newDocumentBuilder();

String source= "e:/jhb1117/classes/xmldoc/candidate.xml ";

doc=builder.parse(source);

}

public void showDocument() {

//get all

NodeList personList=doc.getElementsByTagName(XMLTagDir.NODE_PERS ON); // "PERSON " 也可,本文中为数据词典

for(int i=0;i

{

Element person=(Element)personList.item(i);

System.out.print(XMLTagDir.NODE_NAME+ ": ");

System.out.println(getNodeValue(person,XMLTagDir.NODE_NAME));

System.out.print(XMLTagDir.NODE_ADDRESS+ ": ");

System.out.println(getNodeValue(person,XMLTagDir.NODE_ADDRESS));

System.out.print(XMLTagDir.NODE_TEL+ ": ");

System.out.println(getNodeValue(person,XMLTagDir.NODE_TEL));

System.out.print(XMLTagDir.NODE_FAX+ ": ");

System.out.println(getNodeValue(person,XMLTagDir.NODE_FAX));

System.out.print(XMLTagDir.NODE_EMAIL+ ": ");

System.out.println(getNodeValue(person,XMLTagDir.NODE_EMAIL));

System.out.println();

}

}

public String getNodeValue(Element person,String nodeName){ NodeList nameList=person.getElementsByTagName(nodeName);

Element name=(Element)nameList.item(0);

Text text=(Text)name.getFirstChild();

String value=text.getNodeValue();

return value;

}

public void saveDocument(String path) throws IOException

{

FileWriter fw=new FileWriter(path);

XmlDocument xmldoc=(XmlDocument)doc;

xmldoc.write(fw);

fw.close();

}

public static void main(String args[]){

try{

DomParserDemo doc=new DomParserDemo();

doc.showDocument();

// String path= "e:/houjie/JavaAdvance/dist/xmldoc/parseOut.xml ";

String path= "e:/jhb1117/classes/xmldoc/jhbparseOut.xml ";

doc.saveDocument(path);

System.out.print( "file saved ");

}catch(Exception e){

e.printStackTrace();

}

}

}

2、

package myxml;

import javax.xml.parsers.*;

import org.w3c.dom.*;

import org.apache.crimson.tree.*;

import java.io.*;

/**

*

Title:

*

Description:

*

Copyright: Copyright (c) 2002

*

Company:

* @author xxy

* @version 1.0

*/

public class DomCreateDemo {

private Document doc;

public DomCreateDemo() throws Exception{

DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

DocumentBuilder builder=factory.newDocumentBuilder();

doc=builder.newDocument();

}

public void createDocument(){

if(doc==null) return;

Element peopleElement=doc.createElement(XMLTagDir.NODE_PEOPLE);

for(int i=1;i <=3;i++){

Element personElement=doc.createElement(XMLTagDir.NODE_PERSO N);

personElement.setAttribute( "PERSONID ", "E "+i);

//one person include several tags

Text text=null;

Element nameElement=doc.createElement(XMLTagDir.NODE_NAME);

text=doc.createTextNode( "myName "+i);

nameElement.appendChild(text);

personElement.appendChild(nameElement);

Element addressElement=doc.createElement(XMLTagDir.NODE_ADDR ESS);

text=doc.createTextNode( "myAddress "+i);

addressElement.appendChild(text);

personElement.appendChild(addressElement);

Element telElement=doc.createElement(XMLTagDir.NODE_TEL);

text=doc.createTextNode( "myTel "+i);

telElement.appendChild(text);

personElement.appendChild(telElement);

Element faxElement=doc.createElement(XMLTagDir.NODE_FAX);

text=doc.createTextNode( "myFax "+i);

faxElement.appendChild(text);

personElement.appendChild(faxElement);

Element emailElement=doc.createElement(XMLTagDir.NODE_EMAIL);

text=doc.createTextNode( "myEmail "+i);

emailElement.appendChild(text);

personElement.appendChild(emailElement);

peopleElement.appendChild(personElement);

}

doc.appendChild(peopleElement);

}

public void saveDocument(String path) throws IOException {

FileWriter fout=new FileWriter(path);

XmlDocument xmldoc=(XmlDocument)doc;

xmldoc.write(fout);

fout.close();

}

public static void main(String[] args) {

try{

DomCreateDemo doc = new DomCreateDemo();

doc.createDocument();

System.out.print( "doc created ");

String path= "e:/jhb1117/classes/xmldoc/jhbcreateOut.xml ";

// String path= "e:/houjie/JavaAdvance/dist/xmldoc/createOut.xml ";

doc.saveDocument(path);

System.out.print( "file saved ");

}catch(Exception e){

e.printStackTrace();

}

}

}

3、

package myxml;

import javax.xml.parsers.*;

import org.w3c.dom.*;

import org.apache.crimson.tree.*;

import java.io.*;

/**

*

Title:

*

Description:

*

Copyright: Copyright (c) 2002

*

Company:

* @author xxy

* @version 1.0

*/

public class DomCreateDemo {

private Document doc;

public DomCreateDemo() throws Exception{

DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

DocumentBuilder builder=factory.newDocumentBuilder();

doc=builder.newDocument();

}

public void createDocument(){

if(doc==null) return;

Element peopleElement=doc.createElement(XMLTagDir.NODE_PEOPLE);

for(int i=1;i <=3;i++){

Element personElement=doc.createElement(XMLTagDir.NODE_PERSO N);

personElement.setAttribute( "PERSONID ", "E "+i);

peopleElement.appendChild(personElement);

}

doc.appendChild(peopleElement);

}

public void saveDocument(String path) throws IOException {

FileWriter fout=new FileWriter(path);

XmlDocument xmldoc=(XmlDocument)doc;

xmldoc.write(fout);

fout.close();

}

public static void main(String[] args) {

try{

DomCreateDemo doc = new DomCreateDemo();

doc.createDocument();

System.out.print( "doc created ");

// String path= "e:/houjie/JavaAdvance/dist/xmldoc/createOut.xml ";

String path= "e:/jhb1117/classes/xmldoc/jhbcreateOut.xml ";

doc.saveDocument(path);

System.out.print( "file saved ");

}catch(Exception e){

e.printStackTrace();

}

}

}

4、

package myxml;

import javax.xml.parsers.*;

import org.w3c.dom.*;

import org.apache.crimson.tree.*;

import org.xml.sax.SAXException;

import java.io.*;

public class DomParserDemo{

private Document doc;

public DomParserDemo() throws

IOException,ParserConfigurationException,SAXException{

DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

DocumentBuilder builder=factory.newDocumentBuilder();

// Document doc=builder.parse( "resources/xmldoc/candidate.xml ");

// String source= "f:/houjie/JavaAdvance/dist/xmldoc/candidate.xml ";

String source= "e:/jhb1117/classes/xmldoc/candidate.xml ";

doc=builder.parse(source);

}

public void showDocument() {

//get all

NodeList personList=doc.getElementsByTagName(XMLTagDir.NODE_PERS ON);

for(int i=0;i

Element person=(Element)personList.item(i);

System.out.print(XMLTagDir.NODE_NAME);

System.out.println(getNodeValue(person,XMLTagDir.NODE_NAME));

System.out.print(XMLTagDir.NODE_ADDRESS);

System.out.println(getNodeValue(person,XMLTagDir.NODE_ADDRESS));

System.out.print(XMLTagDir.NODE_TEL);

System.out.println(getNodeValue(person,XMLTagDir.NODE_TEL));

System.out.print(XMLTagDir.NODE_FAX);

System.out.println(getNodeValue(person,XMLTagDir.NODE_FAX));

System.out.print(XMLTagDir.NODE_EMAIL);

System.out.println(getNodeValue(person,XMLTagDir.NODE_EMAIL));

System.out.println();

}

}

public void showAndSavePeopleDocument(Document doc,String path) { //get all

NodeList personList=doc.getElementsByTagName(XMLTagDir.NODE_PERS ON);

for(int i=0;i

Element person=(Element)personList.item(i);

System.out.print(XMLTagDir.NODE_NAME);

System.out.println(getNodeValue(person,XMLTagDir.NODE_NAME));

System.out.print(XMLTagDir.NODE_ADDRESS);

System.out.println(getNodeValue(person,XMLTagDir.NODE_ADDRESS));

System.out.print(XMLTagDir.NODE_TEL);

System.out.println(getNodeValue(person,XMLTagDir.NODE_TEL));

System.out.print(XMLTagDir.NODE_FAX);

System.out.println(getNodeValue(person,XMLTagDir.NODE_FAX));

System.out.print(XMLTagDir.NODE_EMAIL);

System.out.println(getNodeValue(person,XMLTagDir.NODE_EMAIL));

System.out.println();

}

try{

saveDocument(doc,path);

}catch(Exception e){

e.printStackTrace();

}

}

public String getNodeValue(Element person,String nodeName){

NodeList nameList=person.getElementsByTagName(nodeName);

Element name=(Element)nameList.item(0);

Text text=(Text)name.getFirstChild();

String value=text.getNodeValue();

return value;

}

public void saveDocument(String path) throws IOException {

FileWriter fout=new FileWriter(path);

XmlDocument xmldoc=(XmlDocument)doc;

xmldoc.write(fout);

fout.close();

}

public void saveDocument(Document doc,String path) throws IOException {

FileWriter fout=new FileWriter(path);

XmlDocument xmldoc=(XmlDocument)doc;

xmldoc.write(fout);

fout.close();

}

public static void main(String args[]){

try{

DomParserDemo doc=new DomParserDemo();

doc.showDocument();

// String path= "e:/houjie/JavaAdvance/dist/xmldoc/parseOut.xml ";

String path= "e:/jhb1117/classes/xmldoc/jhbparseOut.xml ";

doc.saveDocument(path);

System.out.print( "file saved ");

}catch(Exception e){

e.printStackTrace();

}

}

}

5、

package myxml;

/**

*

Title:

*

Description:

*

Copyright: Copyright (c) 2002

*

Company:

* @author xxy

* @version 1.0

*/

/*

NAME

ADDRESS

TEL

FAX

EMAIL

*/

public class DBPeople {

public DBPeople() {

}

public static final int NAME=1;

public static final int ADDRESS=2;

public static final int TEL=3;

public static final int FAX=4;

public static final int EMAIL=5;

private String name;

private String address;

private String tel;

private String fax;

private String email;

public String getName() {

return name;

}

public void setName(String name) {

https://www.doczj.com/doc/8d12268351.html, = name;

}

public void setAddress(String address) { this.address = address;

}

public String getAddress() {

return address;

}

public void setTel(String tel) {

this.tel = tel;

}

public String getTel() {

return tel;

}

public void setFax(String fax) {

this.fax = fax;

}

public String getFax() {

return fax;

}

public void setEmail(String email) { this.email = email;

}

public String getEmail() {

return email;

}

}

6、

package myxml;

import javax.xml.parsers.*;

import org.w3c.dom.*;

import org.apache.crimson.tree.*;

import javax.xml.transform.*;

import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import java.io.*;

/**

*

Title:

*

Description:

*

Copyright: Copyright (c) 2002

*

Company:

* @author xxy

* @version 1.0

*/

public class DomTransform {

private Document doc;

private Transformer transformer;

public DomTransform() throws Exception{

DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

DocumentBuilder builder=factory.newDocumentBuilder();

// String source= "e:/houjie/JavaAdvance/dist/xmldoc/candidate.xml ";

String source= "e:/jhb1117/classes/xmldoc/candidate.xml ";

doc=builder.parse(source);

TransformerFactory tf=TransformerFactory.newInstance();

transformer=tf.newTransformer();

}

public void changeDocument(){

//get all

NodeList personList=doc.getElementsByTagName(XMLTagDir.NODE_PERSON);

for(int i=0;i

Element person=(Element)personList.item(i);

setNodeValue(person,XMLTagDir.NODE_ADDRESS, "newAddress "+i); //改变address值

System.out.print(XMLTagDir.NODE_ADDRESS);

System.out.println(getNodeValue(person,XMLTagDir.NODE_ADDRESS));

}

}

public void setNodeValue(Element person,String nodeName,String newValue){ NodeList nameList=person.getElementsByTagName(nodeName);

Element name=(Element)nameList.item(0);

Text text=(Text)name.getFirstChild();

text.setNodeValue(newValue);

}

public String getNodeValue(Element person,String nodeName){

NodeList nameList=person.getElementsByTagName(nodeName);

Element name=(Element)nameList.item(0);

Text text=(Text)name.getFirstChild();

String value=text.getNodeValue();

return value;

}

public void saveDocument(String path) throws IOException,TransformerExcept ion {

FileWriter fout=new FileWriter(path);

DOMSource source=new DOMSource(doc);

StreamResult result=new StreamResult(fout);

transformer.transform(source,result);

/* XmlDocument xmldoc=(XmlDocument)doc;

xmldoc.write(fout);

*/ fout.close();

}

public static void main(String[] args) {

try{

DomTransform doc = new DomTransform();

doc.changeDocument();

System.out.println( "doc changed ");

// String path= "e:/houjie/JavaAdvance/dist/xmldoc/transformOut.xml ";

String path= "e:/jhb1117/classes/xmldoc/transformOut.xml ";

doc.saveDocument(path);

System.out.print( "file saved ");

}catch(Exception e){

e.printStackTrace();

}

7、

package myxml;

import java.io.Serializable;

import java.sql.*;

import oracle.jdbc.driver.OracleDriver;

import java.util.*;

public class PeopleProcessor implements Serializable{

private Connection conn;

private Statement stmt;

private String url= "jdbc:oracle:oci8:@orcl817 ";

private String user= "scott ";

private String pwd= "tiger ";

public PeopleProcessor() throws SQLException{

initdb();

System.out.println( "connected ");

}

private void initdb()throws SQLException{

DriverManager.setLoginTimeout(10);

try{

// Driver driver=new oracle.jdbc.driver.OracleDriver();

// DriverManager.registerDriver(driver);

Class.forName( "oracle.jdbc.driver.OracleDriver ");

conn=DriverManager.getConnection(url,user,pwd);

conn.setAutoCommit(false);

stmt=conn.createStatement();

}catch(ClassNotFoundException e){

e.printStackTrace();

throw new SQLException( "driver class not found ");

}catch(SQLException e){

e.printStackTrace();

throw new SQLException( "db connection failed ");

}

}

public ResultSet doQuery(String sql)throws SQLException{ ResultSet rs=null;

rs=stmt.executeQuery(sql);

return rs;

}

public int doUpdate(String sql)throws SQLException{

int n;

n=stmt.executeUpdate(sql);

https://www.doczj.com/doc/8d12268351.html,mit();

System.out.println(n+ " records updated\n ");

return n;

}

public int insertPeople(DBPeople people)throws SQLException

{

String sql= "insert into people values(?,?,?,?,?) ";

PreparedStatement ps=conn.prepareStatement(sql);

ps.setString(https://www.doczj.com/doc/8d12268351.html,,people.getName());

ps.setString(DBPeople.ADDRESS,people.getAddress());

ps.setString(DBPeople.TEL,people.getTel());

ps.setString(DBPeople.FAX,people.getFax());

ps.setString(DBPeople.EMAIL,people.getEmail());

int n=ps.executeUpdate();

ps.close();

return n;

}

public void close() throws SQLException{

if(conn!=null) conn.close();

if(stmt!=null) stmt.close();

}

public void commit()throws SQLException{

if(conn!=null)

https://www.doczj.com/doc/8d12268351.html,mit();

}

public static String toChinese(String strValue){

try{

if(strValue==null){

return null;

}

else{

byte[] bytes=strValue.getBytes( "ISO8859 ");

return new String(bytes, "GKB ");

}

}catch(Exception e){

return null;

}

}

public List retrievePeople()throws SQLException{ List peopleList=new LinkedList();

String sql= "select * from people ";

ResultSet rs=stmt.executeQuery(sql);

ResultSetMetaData meta=rs.getMetaData();

int columns=meta.getColumnCount();

int n=0;

while(rs.next()){

DBPeople people=new DBPeople();

people.setName(rs.getString(https://www.doczj.com/doc/8d12268351.html,));

people.setAddress(rs.getString(DBPeople.ADDRESS));

people.setTel(rs.getString(DBPeople.TEL));

people.setFax(rs.getString(DBPeople.FAX));

people.setEmail(rs.getString(DBPeople.EMAIL));

peopleList.add(people);

}

return peopleList;

}

public static void main(String args[]){

try{

PeopleProcessor jp=new PeopleProcessor();

// ResultSet rs=jp.doQuery( "select * from emp where empno= '0001 ' ");

ResultSet rs=jp.doQuery( "select * from people ");

ResultSetMetaData meta=rs.getMetaData();

int columns=meta.getColumnCount();

int n=0;

while(rs.next()){

for(int i=1;i <=columns;i++){

System.out.print(rs.getString(i)+ "\t ");

}

n++;

System.out.println();

}

System.out.println(n+ " rows selcted ");

List peopleList=jp.retrievePeople();

System.out.println( "there are " +peopleList.size()+ " records in people ");

jp.close();

}catch(SQLException e){}

}

}

8、

package myxml;

import javax.xml.parsers.*;

import org.w3c.dom.*;

import org.apache.crimson.tree.*;

import java.io.*;

import java.util.*;

/**

*

Title:

*

Description:

*

Copyright: Copyright (c) 2002

*

Company:

* @author xxy

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/8d12268351.html, 出品的一个开源XML 解析包。DOM4J应用于Java 平台,采用了Java 集合框架并完全支持DOM,SAX 和JAXP。 DOM4J 使用起来非常简单。只要你了解基本的XML-DOM 模型,就能使用。 Dom:把整个文档作为一个对象。 DOM4J 最大的特色是使用大量的接口。它的主要接口都在org.dom4j里面定义:

接口之间的继承关系如下: interface https://www.doczj.com/doc/8d12268351.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/8d12268351.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();

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/8d12268351.html,/ JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。正在考虑通过“Java规范请求JSR-102”将它最终用作“Java标准扩展”。从2000年初就已经开始了JDOM开发。 JDOM与DOM主要有两方面不同。首先,JDOM仅使用具体类而不使用接口。这在某些方面简化了API,但是也限制了灵活性。第二,API大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的使用。

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/8d12268351.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注释的行为

org.w3c.dom(java dom)解析XML文档

位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效果可能会不理想 首先来了解点Java DOM 的API: 1.解析器工厂类:DocumentBuilderFactory 创建的方法:DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 2.解析器:DocumentBuilder 创建方法:通过解析器工厂类来获得DocumentBuilder db = dbf.newDocumentBuilder(); 3.文档树模型Document 创建方法:a.通过xml文档 Document doc = db.parse("bean.xml"); b.将需要解析的xml文档转化为输入流InputStream is = new FileInputStream("bean.xml"); Document doc = db.parse(is); Document对象代表了一个XML文档的模型树,所有的其他Node都以一定的顺序包含在Document对象之内,排列成一个树状结构,以后对XML文档的所有操作都与解析器无关, 直接在这个Document对象上进行操作即可; 包含的方法:

4.节点列表类NodeList NodeList代表了一个包含一个或者多个Node的列表,根据操作可以将其简化的看做为数组 5.节点类Node

Node对象是DOM中最基本的对象,代表了文档树中的抽象节点。但在实际使用中很少会直接使用Node对象,而是使用Node对象的子对象Element,Attr,Text等 6.元素类Element 是Node类最主要的子对象,在元素中可以包含属性,因而Element中有存取其属性的方法

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/8d12268351.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); %>

java读写xml文件的方法

在java环境下读取xml文件的方法主要有4种:DOM、SAX、JDOM、JAXB 1. DOM(Document Object Model) 此方法主要由W3C提供,它将xml文件全部读入内存中,然后将各个元素组成一棵数据树,以便快速的访问各个节点。因此非常消耗系统性能,对比较大的文档不适宜采用DOM方法来解析。 DOM API 直接沿袭了 XML 规范。每个结点都可以扩展的基于 Node 的接口,就多态性的观点来讲,它是优秀的,但是在Java 语言中的应用不方便,并且可读性不强。 实例: Java代码 1.import javax.xml.parsers.*; 2.//XML解析器接口 3.import org.w3c.dom.*; 4.//XML的DOM实现 5.import org.apache.crimson.tree.XmlDocument; 6.//写XML文件要用到 7.DocumentBuilderFactory factory = DocumentBuilderFactory.newInst ance(); 8. //允许名字空间 9. factory.setNamespaceAware(true); 10. //允许验证 11. factory.setValidating(true); 12. //获得DocumentBuilder的一个实例 13.try { 14. DocumentBuilder builder = factory.newDocumentBuilder(); 15.} catch (ParserConfigurationException pce) { 16.System.err.println(pce); 17.// 出异常时输出异常信息,然后退出,下同 18.System.exit(1); 19.} 20.//解析文档,并获得一个Document实例。 21.try { 22.Document doc = builder.parse(fileURI); 23.} catch (DOMException dom) { 24.System.err.println(dom.getMessage()); 25.System.exit(1); 26.} catch (IOException ioe) { 27.System.err.println(ioe); 28.System.exit(1); 29.}

利用反射与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解析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 {

【黑马程序员】使用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

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解析器比较

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/8d12268351.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应用程序来说当然是有用的,并且大多数开

java dom解析xml

java dom解析xml 010000 00000CC3 20100629173405 1 000001 import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; public class FileTest { /** * @param args */ public static void main(String[] args) { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try { DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse("d:/test.xml"); //得到根节点 Element root = doc.getDocumentElement(); NodeList nl = root.getElementsByTagName("HLR"); Element e = (Element) nl.item(0); String hlrId=e.getAttribute("HlrId"); System.out.println(hlrId); }catch(Exception e){

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/8d12268351.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;

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

java解析XMl文件完整版DOM解析XML

package XML; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class DomTest { private Document doc;

//获得DOM树,元素的添加删除都会用到DOM树所以抽出一个方法来 public void document(){ try { // 1.创建解析工厂对象 DocumentBuilderFactory factory = DocumentBuilderFactory .newInstance(); // 2.通过解析器工厂对象创建解析器对象 DocumentBuilder document = factory.newDocumentBuilder(); // 3.指定解析XML文件,parse("路径")里面写的是文件的路径,并不是文件名。我这里是在这个项目里面,所有写的是相对路径。 doc = document.parse("NewFile.xml"); } catch (Exception e) { } } //解析XML文件

四中最常用的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

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