- 浏览: 342701 次
- 性别:
- 来自: 上海
-
文章分类
最新评论
-
alafqq:
很好的一篇启蒙hashmap的文章;HASHTABLE的93行 ...
使用数组和链表实现hash表存储信息 -
小帅1127:
我擦,我还以为有什么大坑呢,这也写出来。。。
if..else if和if..if的区别 -
fncj:
转下http://www.dodoer.com
hadoop单机版搭建图文详解 -
yueshang520:
Spring注解原理的详细剖析与实现 -
fncj:
转下,谢谢http://www.whohelpme.com/b ...
Spring注解原理的详细剖析与实现
四种XML解析方法:
(1)Dom生成和解析XML文档
*解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。
* 优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;
* 缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;
* 使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)。
(2)SAX生成和解析XML文档
* SAX ,事件驱动。
* 当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。
* 优点:不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载。
* 缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;
* 无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;
* 使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少;
(3)DOM4J生成和解析XML文档
* DOM4J 是一个非常非常优秀的Java XML API,
* 具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。
* 如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写 XML,特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J。
(4)JDOM生成和解析XML
*为减少DOM、SAX的编码量,出现了JDOM;
*优点:20-80原则,极大减少了代码量。
*使用场合:要实现的功能简单,如解析、创建等,
*但在底层,JDOM还是使用SAX(最常用)、DOM、Xanan文档。
首先编写一个要解析的test.xml文件
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <employees> <employee> <name>wxyfree</name> <age>30</age> </employee> <employee> <name>freewxy</name> <age>22</age> </employee> </employees>
然后,编写一个XMLDocument接口
/** * 定义XML文档建立与解析的接口 * @author wxy * */ public interface XMLDocument { /** *建立XML文档 * @param fileName 文件全路径名 */ public void createXML(String fileName); /** * 解析XML文档 * @param fileName 文件全路径名 */ public void parseXML(String fileName); }
一、
package review.testXML; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; 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; import org.xml.sax.SAXException; /** * Dom生成和解析XML文档 * 为 XML 文档的已解析版本定义了一组接口。 * 解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。 * 优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能; * 缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间; * 使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)。 * @param args */ public class DomDemo implements XMLDocument { private Document document; private String fileName; public void init(){ try{ DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder builder=factory.newDocumentBuilder(); this.document=builder.newDocument(); }catch(ParserConfigurationException e){ System.out.println(e.getMessage()); } } @Override public void createXML(String fileName) { Element root=this.document.createElement("employees");//创建根元素 this.document.appendChild(root); Element employee=this.document.createElement("employee");//创建子元素 Element name=this.document.createElement("name");//添加元素的属性 name.appendChild(this.document.createTextNode("wxyfree")); employee.appendChild(name);//将元素添加到子元素中 Element sex=this.document.createElement("sex"); sex.appendChild(this.document.createTextNode("m")); Element age=this.document.createElement("age"); age.appendChild(this.document.createTextNode("30")); employee.appendChild(age); root.appendChild(employee);//将子元素添加到根元素中 TransformerFactory tf=TransformerFactory.newInstance();//此抽象类的实例能够将源树转为结果树 try{ Transformer transformer=tf.newTransformer(); DOMSource source=new DOMSource(document);//创建带有DOM节点的新输入源 transformer.setOutputProperty(OutputKeys.ENCODING,"UTF-8");//设置转换中世纪的输出属性 transformer.setOutputProperty(OutputKeys.INDENT, "yes");// PrintWriter pw=new PrintWriter(new FileOutputStream(fileName)); StreamResult result=new StreamResult(pw);//充当转换结果的持有者,可以为xml、纯文本、HTML或某些其他格式的标记 transformer.transform(source, result);//将XML Source转换为Result System.out.println("生成XML文件成功"); }catch(TransformerConfigurationException e){ System.out.println(e.getMessage()); } catch (TransformerException e) { System.out.println(e.getMessage()); } catch (FileNotFoundException e) { System.out.println(e.getMessage()); } } @Override public void parseXML(String fileName) { DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); DocumentBuilder db; try { db = dbf.newDocumentBuilder(); Document document = db.parse(fileName); NodeList employees=document.getChildNodes(); for(int i=0;i<employees.getLength();i++){ Node employee=employees.item(i); NodeList employeeInfo=employee.getChildNodes(); for(int j=0;j<employeeInfo.getLength();j++){ Node node=employeeInfo.item(j); NodeList employeeMeta=node.getChildNodes(); for(int k=0;k<employeeMeta.getLength();k++){ System.out.println(employeeMeta.item(k).getNodeName()+":"+employeeMeta.item(k).getTextContent()); } } } } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("解析完毕"); } public static void main(String[] args){ DomDemo d=new DomDemo(); d.init(); d.createXML("conf/test2.xml"); d.parseXML("conf/test.xml"); } }
二、
package review.testXML; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.HandlerBase; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; /** * SAX ,事件驱动。 * 当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。 * 优点:不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载。 * 缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了; * 无状态性;从事件中只能得到文本,但不知该文本属于哪个元素; * 使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少; * @author wxy * */ public class SaxDemo implements XMLDocument{ @Override public void createXML(String fileName) { System.out.println("<<"+fileName+">>"); } @Override public void parseXML(String fileName) { SAXParserFactory saxfac=SAXParserFactory.newInstance(); try { SAXParser saxParser=saxfac.newSAXParser(); InputStream ins=new FileInputStream(fileName); saxParser.parse(ins,new MySAXHandler()); } catch (ParserConfigurationException e) { System.out.println(e.getMessage()); } catch (SAXException e) { System.out.println(e.getMessage()); } catch (FileNotFoundException e) { System.out.println(e.getMessage()); } catch (IOException e) { System.out.println(e.getMessage()); } } /** * @param args */ public static void main(String[] args) { SaxDemo s=new SaxDemo(); s.parseXML("conf/test.xml"); } } class MySAXHandler extends DefaultHandler{ boolean hasAttribute=false; Attributes attributes=null; /** * Receive notification of the beginning of the document. */ public void startDocument()throws SAXException{ System.out.print("文档开始打印了"); } /** * Receive notification of the end of the document. */ public void endDocument()throws SAXException{ System.out.print("文档开始结束了"); } /** * Receive notification of the start of an element. * @param uri The Namespace URI, or the empty string if the * element has no Namespace URI or if Namespace * processing is not being performed. * @param localName The local name (without prefix), or the * empty string if Namespace processing is not being * performed. * @param qName The qualified name (with prefix), or the * empty string if qualified names are not available. * @param attributes The attributes attached to the element. If * there are no attributes, it shall be an empty * Attributes object. * @exception org.xml.sax.SAXException Any SAX exception, possibly * wrapping another exception. */ public void startElement(String uri,String localName,String qName,Attributes attributes)throws SAXException{ if(qName.equals("employees")){return;} if(qName.equals("employee")){ System.out.print(qName); } if(attributes.getLength()>0){ this.attributes=attributes; this.hasAttribute=true; } } /** * Receive notification of the end of an element. * @param uri The Namespace URI, or the empty string if the * element has no Namespace URI or if Namespace * processing is not being performed. * @param localName The local name (without prefix), or the * empty string if Namespace processing is not being * performed. * @param qName The qualified name (with prefix), or the * empty string if qualified names are not available. * @exception org.xml.sax.SAXException Any SAX exception, possibly * wrapping another exception. */ public void endElement(String uri,String localName,String qNaqme)throws SAXException{ if(hasAttribute&&(attributes!=null)){ for(int i=0;i<attributes.getLength();i++){ System.out.print(attributes.getQName(0)+attributes.getValue(0)); } } } /** * Receive notification of character data inside an element. * @param ch The characters. * @param start The start position in the character array. * @param length The number of characters to use from the * character array. */ public void characters(char[] ch,int start,int length)throws SAXException{ System.out.print(new String(ch,start,length)); } }
三、
package review.testXML; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.util.Iterator; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; /** * Dom4j 生成XML文档与解析XML文档 * DOM4J 是一个非常非常优秀的Java XML API, * 具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。 * 如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写 XML,特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J。 * @author wxy * */ public class Dom4jDemo implements XMLDocument{ @Override public void createXML(String fileName) { Document document = DocumentHelper.createDocument(); Element employees=document.addElement("employees"); Element employee=document.addElement("employee"); Element name=employee.addElement("name"); name.setText("wxy"); Element sex=employee.addElement("sex"); name.setText("f"); Element age=employee.addElement("age"); name.setText("29"); try { Writer fileWriter=new FileWriter(fileName); XMLWriter xmlWriter=new XMLWriter(fileWriter); xmlWriter.write(document); xmlWriter.close(); } catch (IOException e) { System.out.println(e.getMessage()); } } @Override public void parseXML(String fileName) { File inputXML=new File(fileName); SAXReader saxReader=new SAXReader(); try { Document document=saxReader.read(inputXML); Element employees=document.getRootElement(); for(Iterator i=employees.elementIterator();i.hasNext();){ Element employee=(Element)i.next(); for(Iterator j=employee.elementIterator();j.hasNext();){ Element node=(Element)j.next(); System.out.println(node.getName()+":"+node.getText()); } } } catch (DocumentException e) { System.out.println(e.getMessage()); } System.out.println("dom4j parserXML"); } public static void main(String[] args) { Dom4jDemo d=new Dom4jDemo(); d.parseXML("conf/test.xml"); } }
四、
package review.testXML; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import org.jdom.output.XMLOutputter; /** * JDOM生成和解析XML *为减少DOM、SAX的编码量,出现了JDOM; *优点:20-80原则,极大减少了代码量。 *使用场合:要实现的功能简单,如解析、创建等, *但在底层,JDOM还是使用SAX(最常用)、DOM、Xanan文档。 * @author wxy * */ public class JDomDemo implements XMLDocument{ @Override public void createXML(String fileName) { Document document; Element root; root=new Element("employees"); document=new Document(root); Element employee=new Element("employee"); root.addContent(employee); Element name=new Element("name"); name.setText("wxywxy"); employee.addContent(name); Element sex=new Element("sex"); sex.setText("m"); employee.addContent(sex); Element age=new Element("age"); age.setText("25"); employee.addContent(age); XMLOutputter XMLOut=new XMLOutputter(); try { XMLOut.output(document, new FileOutputStream(fileName)); } catch (FileNotFoundException e) { System.out.println(e.getMessage()); } catch (IOException e) { System.out.println(e.getMessage()); } } @Override public void parseXML(String fileName) { SAXBuilder builder=new SAXBuilder(false); try { Document document=builder.build(fileName); Element employees=document.getRootElement(); List employeeList=employees.getChildren("employee"); for(int i=0;i<employeeList.size();i++){ Element employee=(Element)employeeList.get(i); List employeeInfo=employee.getChildren(); for(int j=0;j<employeeInfo.size();j++){ System.out.println(((Element)employeeInfo.get(j)).getName()+":"+((Element)employeeInfo.get(j)).getText()); } } } catch (JDOMException e) { System.out.println(e.getMessage()); } catch (IOException e) { System.out.println(e.getMessage()); } } public static void main(String[] args){ JDomDemo jd=new JDomDemo(); jd.parseXML("conf/test.xml"); } }
发表评论
-
apache日志信息详解
2011-11-06 21:19 6319一、访问日志的格式 Apache内建了记录服务器 ... -
浏览器如何工作
2011-08-19 08:57 0http://taligarsiel.com/Projects ... -
编码实现用JDK中的Proxy实现springAOP功能
2011-08-18 15:04 792http://blog.csdn.net/iamtheevil ... -
Spring注解原理的详细剖析与实现
2011-08-14 23:09 84350本文主要分为三部分: ... -
Spring装配基本属性的原理分析与代码实现
2011-08-11 15:37 1481首先,做一个配置属性的基本测试。修改beans.xml,使引用 ... -
编码剖析Spring依赖注入的原理
2011-08-10 20:01 1868一、注入依赖对象 基本类型对象注入: <b ... -
Spring的三种实例化Bean的方法
2011-08-10 14:03 1Spring的三种实例化Bean的方法 1、 使用 ... -
Spring管理bean的原理自定义实现
2011-08-10 10:44 62441、Spring通过BeanDefinition管理基于S ... -
spring环境搭建与测试
2011-08-10 08:40 3473Chapter1、搭建与测试spring的环境 1、 ... -
java回调机制实现
2011-08-08 09:06 2106Java的接口支持提供了一种获得回调的等价功能的 ... -
log4j的使用与详细分析
2011-08-05 13:32 2692一、什么是log4j? http://logging.a ... -
log4j使用详解
2011-08-04 23:05 2http://logging.apache.org/log4j ... -
自定义日志模块实现
2011-03-30 09:58 1167package wxy.XXXX.Utils; impo ... -
synchronized(this)
2011-03-29 09:17 70551、当两个并发线程访问同一个对象object中的这个synch ... -
详细解析Java中抽象类和接口的区别(转)
2011-03-24 23:48 975在Java语言中, abstract cl ... -
NIO学习笔记(三)---通道
2011-03-09 23:06 16031、通道基础 ... -
NIO学习笔记(2)--缓冲区
2011-03-09 18:20 9881、一个Buffer对象是固定数量的数据的容器。其作用是 ... -
封锁管理子系统模拟实现java版
2011-03-09 18:01 1245封锁管理子系统模拟实现 文件锁定 ... -
NIO学习笔记(一)I/O缓冲区操作
2011-03-07 20:04 1285上图简单描述了数据从外部磁盘向运行中的进程的内存区域移动的 ... -
四种参数传递机制的比较与分析
2011-02-16 23:21 1906一、所有程序设计语言都有关于过程的概念,但是在这些 ...
相关推荐
在Java中,有多种方式来解析XML,主要包括SAX、JDOM和DOM4J。下面我们将详细介绍这三种方法。 1. SAX(Simple API for XML) SAX是一种基于事件驱动的解析器,它不会一次性加载整个XML文档到内存,而是逐行读取,当...
Java解析XML时,主要有四种方法:DOM(Document Object Model)、SAX(Simple API for XML)、StAX(Streaming API for XML)以及JAXB(Java Architecture for XML Binding)。这四种方法各有特点,适用于不同的场景...
本文将深入探讨Java解析XML的四种主要方法。 1. DOM(Document Object Model)解析: DOM解析器将整个XML文档加载到内存中,创建一个树形结构,允许开发者通过节点遍历和操作XML。例如,Java的`javax.xml.parsers....
Java解析XML的四种经典方法是XML处理中常用的技术,它们分别是DOM、SAX、StAX和JDOM。每种方法都有其独特的特性和适用场景,下面将详细介绍这四种方法。 1. DOM(Document Object Model)解析: DOM是W3C制定的一种...
java解析xml的四种方法的比较,还有四种方法所用到的jar包 附带程序例子 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML
总结,Java解析XML的方式多样,每种都有其适用场景。理解这些方法的原理和优缺点,能够帮助开发者根据项目需求选择最佳实践。在实际工作中,可以结合使用这些解析技术,以实现更高效、更安全的XML处理。
### Java解析XML的四种方式详解 #### 一、DOM(Document Object Model) DOM是一种平台和语言中立的接口,它将XML文档表示为一个树结构,使得程序可以创建、读取、更新或删除树中的元素。DOM实现了W3C的标准,能够...
java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析...
JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML
此外,JAXB(Java Architecture for XML Binding)是另一种强大的工具,它可以将XML与Java对象直接映射,方便数据的序列化和反序列化。对于多级XML,JAXB提供了一种更加面向对象的方式来处理数据,但需要额外的配置...
java在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava...
本项目“java解析xml四种方式完整项目”旨在全面介绍和实现利用Java语言解析XML的四种主要方法:DOM、SAX、JDOM和DOM4J。下面将详细阐述这四种解析器的工作原理、优缺点以及如何在实际项目中应用。 1. DOM...
java解析XML四种方案: DOM 实现方法; DOM4J实现方法; JDOM实现方法; SAX实现方法;
JAVA xml 的四种解析方式,(1)Dom生成和解析XML文档 (2)SAX生成和解析XML文档(3)DOM4J生成和解析XML文档 (4)JDOM生成和解析XML
Java解析XML的四种经典方法主要涵盖DOM、SAX、StAX和JDOM这四种方式,每种方法都有其独特的优势和适用场景。 1)DOM(JAXP Crimson 解析器) DOM(Document Object Model)是W3C推荐的一种XML解析标准,它将XML...
### Java解析XML字符串 在给定的代码示例中,我们看到了如何使用JDOM库来解析一个XML字符串,并对其进行操作。下面我们将详细解析这个过程: 1. **初始化XML源**:首先,将XML字符串转化为`StringReader`对象,这...
JAVA 解析xml多种方法 JAVA 解析xml多种方法 JAVA 解析xml多种方法 JAVA 解析xml多种方法 JAVA 解析xml多种方法 JAVA 解析xml多种方法 JAVA 解析xml多种方法
在Java中,有多种方式可以解析XML文件,下面将详细介绍这五种方法。 1. DOM(Document Object Model)解析: DOM解析器将整个XML文档加载到内存中,构建一个树形结构,即DOM树。这种方式方便对XML进行随机访问,但...
以上就是Java中解析XML的四种常见方法,每种方法都有其适用场景。根据项目需求和文件大小,可以选择最合适的解析器。在实际开发中,还可以结合使用jar文件,如`comSample`,来包含和调用相关的解析库。理解并掌握...
总结,Java解析XML有DOM、SAX、StAX和JAXB四种常见方法,每种方法各有优缺点,应根据实际需求选择合适的方法。对于JSON格式,Java提供了多种库如Gson和Jackson来方便地进行序列化和反序列化操作。理解并掌握这些知识...