XML四种解析方法

1、 dom只能读小一点的数据,大数据会占用内存。Sax用于读取大文件。Sax被包含在jdk中,可在jdk的文档中找到相应的说明都可以用来读取xml文件。

2、xml文件使用 在文件中这些标签随便写都可以,建好后就可以建立一个单独的类来读取,用的方法是dom4jw3c方法;hibernate也是用dom4j来读去配置的文件;

3、Dom采用树型结构读取xml文件,而sax采用的是事件模型来读取xml文件

使用dom4j读取文件时要将相关的jar包复制到web——INF/lib中。
               dom4j-1.6.1.jar;
               jaxen-1.1.beta-6.jar
读取xml文件的时候要注意将File文件的地址打“/“才对;
    xml文件导入数据库中的表的时候,将其每个字段最好设为String类型的,然后将每个字段所对应的标签在数据表中设一个字段

后来出现了jdom它是专门为读取Java文档的,使用的是具体的类而不使用接口,dom4j使用:使用了公共类和接口,大量使用了api中的connection类。

SAX表现较好,这要依赖于它特定的解析方式-事件驱动。一个SAX检测即将到来的XML流,但并没有载入到内存(当然当XML流被读入时,会有部分文档暂时隐藏在内存中)

4、四种xml操作方式的基本使用方法

xml文件:
<?xml version="1.0" encoding="utf-8" ?> 
<Result>
   <VALUE>
       <NO DATE="2005">A1</NO>
       <ADDR>GZ</ADDR>
   </VALUE>
   <VALUE>
       <NO DATE="2004">A2</NO>
       <ADDR>XG</ADDR>
  </VALUE>
</Result>
1DOM读取

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.getElementsByTagName("VALUE"); 
for (int i=0;inl.getLength();i++){
System.out.print("车牌号码:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue());
System.out.println("车主地址:" + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue());
} 
}catch(Exception e){ 
e.printStackTrace(); 
} 
2SAX读取

import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*; 
public class MyXMLReader extends DefaultHandler { 
java.util.Stack tags = new java.util.Stack(); 
public MyXMLReader() { 
super();
   } 
public static void main(String args[]) { 
long lasting = System.currentTimeMillis(); 
try { 
SAXParserFactory sf = SAXParserFactory.newInstance(); 
SAXParser sp = sf.newSAXParser(); 
MyXMLReader reader = new MyXMLReader(); 
sp.parse(new InputSource("data_10k.xml"), reader); 
} catch (Exception e) { 
e.printStackTrace(); 
} 
System.out.println("运行时间:" + (System.currentTimeMillis() - lasting) + "毫秒");}
public void characters(char ch[], int start, int length) throws SAXException { 
String tag = (String) tags.peek(); 
if (tag.equals("NO")) {  
System.out.print("车牌号码:" + new String(ch, start, length));
    }
    if (tag.equals("ADDR")) { 
System.out.println("地址:" + new String(ch, start, length));
    }
   } 
public void startElement(String uri,String localName,String qName,Attributes attrs) { 
tags.push(qName);}
} 
 
3) JDOM

import java.io.*;
import java.util.*;
import org.jdom.*;
import org.jdom.input.*; 
public class MyXMLReader { 
public static void main(String arge[]) { 
long lasting = System.currentTimeMillis(); 
try { 
SAXBuilder builder = new SAXBuilder();  
Document doc = builder.build(new File("data_10k.xml"));  
Element foo = doc.getRootElement();  
List allChildren = foo.getChildren();  
for(int i=0;iallChildren.size();i++) {  
System.out.print("车牌号码:" + ((Element)allChildren.get(i)).getChild("NO").getText()); 
System.out.println("车主地址:" + ((Element)allChildren.get(i)).getChild("ADDR").getText()); 
} 
} catch (Exception e) { 
e.printStackTrace(); 
} 
}
4DOM4J

import java.io.*;
import java.util.*;
import org.dom4j.*;
import org.dom4j.io.*; 
public class MyXMLReader { 
public static void main(String arge[]) { 
long lasting = System.currentTimeMillis(); 
try { 
File f = new File("data_10k.xml"); 
SAXReader reader = new SAXReader(); 
Document doc = reader.read(f); 
Element root = doc.getRootElement(); 
Element foo; 
for (Iterator i = root.elementIterator("VALUE"); i.hasNext();) { 
foo = (Element) i.next(); 
System.out.print("车牌号码:" + foo.elementText("NO")); 
System.out.println("车主地址:" + foo.elementText("ADDR")); 
} 
} catch (Exception e) { 
e.printStackTrace(); 
    } 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值