详解Java解析XML的四种方法.docx

上传人:b****0 文档编号:12720044 上传时间:2023-04-21 格式:DOCX 页数:16 大小:18.79KB
下载 相关 举报
详解Java解析XML的四种方法.docx_第1页
第1页 / 共16页
详解Java解析XML的四种方法.docx_第2页
第2页 / 共16页
详解Java解析XML的四种方法.docx_第3页
第3页 / 共16页
详解Java解析XML的四种方法.docx_第4页
第4页 / 共16页
详解Java解析XML的四种方法.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

详解Java解析XML的四种方法.docx

《详解Java解析XML的四种方法.docx》由会员分享,可在线阅读,更多相关《详解Java解析XML的四种方法.docx(16页珍藏版)》请在冰豆网上搜索。

详解Java解析XML的四种方法.docx

详解Java解析XML的四种方法

XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML。

本文将详细介绍用Java解析XML的四种方法。

XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。

对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(DocumentObjectModel),DTD(DocumentTypeDefinition),SAX(SimpleAPIforXML),XSD(XmlSchemaDefinition),XSLT(ExtensibleStylesheetLanguageTransformations),具体可参阅w3c官方网站文档http:

//www.w3.org获取更多信息。

XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已。

基本的解析方式有两种,一种叫SAX,另一种叫DOM。

SAX是基于事件流的解析,DOM是基于XML文档树结构的解析。

假设我们XML的内容和结构如下:

 

xmlversion="1.0"encoding="UTF-8"?

>

ddviplinux

m

30

文使用JAVA语言来实现DOM与SAX的XML文档生成与解析。

首先定义一个操作XML文档的接口XmlDocument它定义了XML文档的建立与解析的接口。

packagecom.alisoft.facepay.framework.bean;

/**

*

*@authorhongliang.dinghl

*定义XML文档建立与解析的接口

*/

publicinterfaceXmlDocument{

/**

*建立XML文档

*@paramfileName文件全路径名称

*/

publicvoidcreateXml(StringfileName);

/**

*解析XML文档

*@paramfileName文件全路径名称

*/

publicvoidparserXml(StringfileName);

}

1.DOM生成和解析XML文档

为XML文档的已解析版本定义了一组接口。

解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用DOM接口来操作这个树结构。

优点:

整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;缺点:

将整个文档调入内存(包括无用的节点),浪费时间和空间;使用场合:

一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)。

 

packagecom.alisoft.facepay.framework.bean;

importjava.io.FileInputStream;

importjava.io.FileNotFoundException;

importjava.io.FileOutputStream;

importjava.io.IOException;

importjava.io.InputStream;

importjava.io.PrintWriter;

importjavax.xml.parsers.DocumentBuilder;

importjavax.xml.parsers.DocumentBuilderFactory;

importjavax.xml.parsers.ParserConfigurationException;

importjavax.xml.transform.OutputKeys;

importjavax.xml.transform.Transformer;

importjavax.xml.transform.TransformerConfigurationException;

importjavax.xml.transform.TransformerException;

importjavax.xml.transform.TransformerFactory;

importjavax.xml.transform.dom.DOMSource;

importjavax.xml.transform.stream.StreamResult;

importorg.w3c.dom.Document;

importorg.w3c.dom.Element;

importorg.w3c.dom.Node;

importorg.w3c.dom.NodeList;

importorg.xml.sax.SAXException;

/**

*

*@authorhongliang.dinghl

*DOM生成与解析XML文档

*/

publicclassDomDemoimplementsXmlDocument{

privateDocumentdocument;

privateStringfileName;

publicvoidinit(){

try{

DocumentBuilderFactoryfactory=DocumentBuilderFactory

.newInstance();

DocumentBuilderbuilder=factory.newDocumentBuilder();

this.document=builder.newDocument();

}catch(ParserConfigurationExceptione){

System.out.println(e.getMessage());

}

}

publicvoidcreateXml(StringfileName){

Elementroot=this.document.createElement("employees");

this.document.appendChild(root);

Elementemployee=this.document.createElement("employee");

Elementname=this.document.createElement("name");

name.appendChild(this.document.createTextNode("丁宏亮"));

employee.appendChild(name);

Elementsex=this.document.createElement("sex");

sex.appendChild(this.document.createTextNode("m"));

employee.appendChild(sex);

Elementage=this.document.createElement("age");

age.appendChild(this.document.createTextNode("30"));

employee.appendChild(age);

root.appendChild(employee);

TransformerFactorytf=TransformerFactory.newInstance();

try{

Transformertransformer=tf.newTransformer();

DOMSourcesource=newDOMSource(document);

transformer.setOutputProperty(OutputKeys.ENCODING,"gb2312");

transformer.setOutputProperty(OutputKeys.INDENT,"yes");

PrintWriterpw=newPrintWriter(newFileOutputStream(fileName));

StreamResultresult=newStreamResult(pw);

transformer.transform(source,result);

System.out.println("生成XML文件成功!

");

}catch(TransformerConfigurationExceptione){

System.out.println(e.getMessage());

}catch(IllegalArgumentExceptione){

System.out.println(e.getMessage());

}catch(FileNotFoundExceptione){

System.out.println(e.getMessage());

}catch(TransformerExceptione){

System.out.println(e.getMessage());

}

}

publicvoidparserXml(StringfileName){

try{

DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();

DocumentBuilderdb=dbf.newDocumentBuilder();

Documentdocument=db.parse(fileName);

NodeListemployees=document.getChildNodes();

for(inti=0;i

Nodeemployee=employees.item(i);

NodeListemployeeInfo=employee.getChildNodes();

for(intj=0;j

Nodenode=employeeInfo.item(j);

NodeListemployeeMeta=node.getChildNodes();

for(intk=0;k

System.out.println(employeeMeta.item(k).getNodeName()

+":

"+employeeMeta.item(k).getTextContent());

}

}

}

System.out.println("解析完毕");

}catch(FileNotFoundExceptione){

System.out.println(e.getMessage());

}catch(ParserConfigurationExceptione){

System.out.println(e.getMessage());

}catch(SAXExceptione){

System.out.println(e.getMessage());

}catch(IOExceptione){

System.out.println(e.getMessage());

}

}

}

2.SAX生成和解析XML文档

为解决DOM的问题,出现了SAX。

SAX,事件驱动。

当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。

优点:

不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载。

缺点:

不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;使用场合:

Applet;只需XML文档的少量内容,很少回头访问;机器内存少;

Java代码

packagecom.alisoft.facepay.framework.bean;   

importjava.io.FileInputStream;  

importjava.io.FileNotFoundException;  

importjava.io.IOException;  

importjava.io.InputStream;  

importjavax.xml.parsers.ParserConfigurationException;  

importjavax.xml.parsers.SAXParser;  

importjavax.xml.parsers.SAXParserFactory;  

importorg.xml.sax.Attributes;  

importorg.xml.sax.SAXException;  

importorg.xml.sax.helpers.DefaultHandler;  

/** 

*  

*@authorhongliang.dinghl 

*SAX文档解析 

*/ 

publicclassSaxDemoimplementsXmlDocument{  

publicvoidcreateXml(StringfileName){  

System.out.println("<<"+filename+">>");  

}  

publicvoidparserXml(StringfileName){  

SAXParserFactorysaxfac=SAXParserFactory.newInstance();  

try{  

SAXParsersaxparser=saxfac.newSAXParser();  

InputStreamis=newFileInputStream(fileName);  

saxparser.parse(is,newMySAXHandler());  

}catch(ParserConfigurationExceptione){  

e.printStackTrace();  

}catch(SAXExceptione){  

e.printStackTrace();  

}catch(FileNotFoundExceptione){  

e.printStackTrace();  

}catch(IOExceptione){  

e.printStackTrace();  

}  

}  

}  

classMySAXHandlerextendsDefaultHandler{  

booleanhasAttribute=false;  

Attributesattributes=null;  

publicvoidstartDocument()throwsSAXException{  

System.out.println("文档开始打印了");  

}  

publicvoidendDocument()throwsSAXException{  

System.out.println("文档打印结束了");  

}  

publicvoidstartElement(Stringuri,StringlocalName,StringqName,  

Attributesattributes)throwsSAXException{  

if(qName.equals("employees")){  

return;  

}  

if(qName.equals("employee")){  

System.out.println(qName);  

}  

if(attributes.getLength()>0){  

this.attributes=attributes;  

this.hasAttribute=true;  

}  

}  

publicvoidendElement(Stringuri,StringlocalName,StringqName)  

throwsSAXException{  

if(hasAttribute&&(attributes!

=null)){  

for(inti=0;i

System.out.println(attributes.getQName(0)  

+attributes.getValue(0));  

}  

}  

}  

publicvoidcharacters(char[]ch,intstart,intlength)  

throwsSAXException{  

System.out.println(newString(ch,start,length));  

}  

packagecom.alisoft.facepay.framework.bean;

importjava.io.FileInputStream;

importjava.io.FileNotFoundException;

importjava.io.IOException;

importjava.io.InputStream;

importjavax.xml.parsers.ParserConfigurationException;

importjavax.xml.parsers.SAXParser;

importjavax.xml.parsers.SAXParserFactory;

importorg.xml.sax.Attributes;

importorg.xml.sax.SAXException;

importorg.xml.sax.helpers.DefaultHandler;

/**

*

*@authorhongliang.dinghl

*SAX文档解析

*/

publicclassSaxDemoimplementsXmlDocument{

publicvoidcreateXml(StringfileName){

System.out.println("<<"+filename+">>");

}

publicvoidparserXml(StringfileName){

SAXParserFactorysaxfac=SAXParserFactory.newInstance();

try{

SAXParsersaxparser=saxfac.newSAXParser();

InputStreamis=newFileInputStream(fileName);

saxparser.parse(is,newMySAXHandler());

}catch(ParserConfigurationExceptione){

e.printStackTrace();

}catch(SAXExceptione){

e.printStackTrace();

}catch(FileNotFoundExceptione){

e.printStackTrace();

}catch(IOExceptione){

e.printStackTrace();

}

}

}

classMySAXHandlerextendsDefaultHandler{

booleanhasAttribute=false;

Attributesattributes=null;

publicvoidstartDocument()throwsSAXException{

System.out.println("文档开始打印了");

}

publicvoidendDocument()throwsSAXException{

System.out.println("文档打印结束了");

}

publicvoidstartElement(Stringuri,StringlocalName,StringqName,

Attributesattributes)throwsSAXException{

if(qName.equals("employees")){

return;

}

if(qName.equals("employee")){

System.out.println(qName);

}

if(attributes.getLength()>0){

this.attributes=attributes;

this.hasAttribute=true;

}

}

publicvoidendElement(Stringuri,StringlocalName,StringqName)

throwsSAXException{

if(hasAttribute&&(attributes!

=null)){

for(inti=0;i

System.out.println(attributes.getQName(0)

+attributes.getValue(0));

}

}

}

publicvoidcharacters(char[]ch,intstart,intlength)

throwsSAXException{

System.out.println(newString(ch,start,length));

}

}

3.DOM4J生成和解析XML文档

DOM4J是一个非常非常优秀的JavaXMLAPI,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。

如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML,特别值得一提的是连Sun的JAXM也在用DOM4J。

Java代

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1