JAVA读取XML文件内容的四种方法
java读取XML文件的四种方法总结(必看篇)
java读取XML⽂件的四种⽅法总结(必看篇)JAVA操作XML⽂档主要有四种⽅式,分别是DOM、SAX、JDOM和DOM4J,DOM和SAX是官⽅提供的,⽽JDOM和DOM4J 则是引⽤第三⽅库的,其中⽤的最多的是DOM4J⽅式。
运⾏效率和内存使⽤⽅⾯最优的是SAX,但是由于SAX是基于事件的⽅式,所以SAX⽆法在编写XML的过程中对已编写内容进⾏修改,但对于不⽤进⾏频繁修改的需求,还是应该选择使⽤SAX。
下⾯基于这四种⽅式来读取XML⽂件。
第⼀,以DOM的⽅式实现。
package xmls;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;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import java.io.File;import java.io.IOException;/*** Created by lenovo on 2017-6-3.*/public class DOMReadDemo {public static void main(String[] args){DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();try{DocumentBuilder db = dbf.newDocumentBuilder();Document document = db.parse("src/xmls/DOM.xml");NodeList booklist = document.getElementsByTagName("book");for(int i = 0; i < booklist.getLength(); i++){System.out.println("--------第" + (i+1) + "本书----------");Element ele = (Element) booklist.item(i);NodeList childNodes= ele.getChildNodes();for(int j = 0; j < childNodes.getLength(); j++){Node n = childNodes.item(j);if(n.getNodeName() != "#text"){System.out.println(n.getNodeName() + ":" + n.getTextContent());}}System.out.println("---------------------------------");}}catch (ParserConfigurationException e){e.printStackTrace();}catch (IOException e){e.printStackTrace();}catch (SAXException e){e.printStackTrace();}}}第⼆,以SAX的⽅式实现。
用java读取xml文件的四种方法
用java读取xml文件的四种方法默认分类2008-09-06 22:37:04 阅读15 评论0 字号:大中小订阅<?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>第一种DOM 实现方法import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.NodeList;public class MyXMLReader2DOM {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; i < nl.getLength(); i++) {System.out.print("车牌号码:"+doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue( ));System.out.println("车主地址:"+doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValu e());}} catch (Exception e) {e.printStackTrace();}}}第二种,DOM4J实现方法import java.io.*;import java.util.*;import org.dom4j.*;import org.dom4j.io.*;public class MyXMLReader2DOM4J {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();}}}第三种JDOM实现方法import java.io.*;import java.util.*;import org.jdom.*;import org.jdom.input.*;public class MyXMLReader2JDOM {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; i < allChildren.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();}}}第四种SAX实现方法import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;import org.xml.sax.InputSource;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class MyXMLReader2SAX extends DefaultHandler {java.util.Stack tags = new java.util.Stack();public MyXMLReader2SAX() {super();}public static void main(String args[]) {long lasting = System.currentTimeMillis();try {SAXParserFactory sf = SAXParserFactory.newInstance();SAXParser sp = sf.newSAXParser();MyXMLReader2SAX reader = new MyXMLReader2SAX();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);}}已知有一个XML文件(bookstore.xml)如下:<?xml version="1.0" encoding="gb2312"?><bookstore><book genre="fantasy" ISBN="2-3631-4"><title>Oberon's Legacy</title><author>Corets, Eva</author><price>5.95</price></book></bookstore>1、往<bookstore>节点中插入一个<book>节点:XmlDocument xmlDoc=new XmlDocument();xmlDoc.Load("bookstore.xml");XmlNode root=xmlDoc.SelectSingleNode("bookstore");//查找<bookstore>XmlElement xe1=xmlDoc.CreateElement("book");//创建一个<book>节点xe1.SetAttribute("genre","李赞红");//设置该节点genre属性xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性XmlElement xesub1=xmlDoc.CreateElement("title");xesub1.InnerText="CS从入门到精通";//设置文本节点xe1.AppendChild(xesub1);//添加到<book>节点中XmlElement xesub2=xmlDoc.CreateElement("author");xesub2.InnerText="候捷";xe1.AppendChild(xesub2);XmlElement xesub3=xmlDoc.CreateElement("price");xesub3.InnerText="58.3";xe1.AppendChild(xesub3);root.AppendChild(xe1);//添加到<bookstore>节点中xmlDoc.Save("bookstore.xml");//===============================================结果为:<?xml version="1.0" encoding="gb2312"?><bookstore><book genre="fantasy" ISBN="2-3631-4"><title>Oberon's Legacy</title><author>Corets, Eva</author><price>5.95</price></book><book genre="李赞红" ISBN="2-3631-4"><title>CS从入门到精通</title><author>候捷</author><price>58.3</price></book></bookstore>2、修改节点:将genre属性值为“李赞红“的节点的genre值改为“update李赞红”,将该节点的子节点<author>的文本修改为“亚胜”。
Java读取xml文件的方法
针对比较有代表性的问题,我们整理了 Java 读取 xml 文件,希望对此感 兴趣的朋友有所参考。 Xml 代码 A1234 河南省郑州市 B1234 河南省郑州市二七区
第一种 DOM 实现方法: Java 代码 import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.NodeList; public class MyXMLReader2DOM { 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; i System.out.print(“车牌号码:”+ doc.getElementsByTagName(“NO”).item(i).getFirstChild().getNodeValue()); System.out.println(“车主地址:”+ doc.getElementsByTagName(“ADDR”).item(i).getFirstChild().getNodeValue()); System.out.println(“运行时间:” + (System.currentTimeMillis() - lasting) + “毫秒”); } }
JAVA技术XML配置文件的读取处理
Java和XML是黄金组合,网上已经有很多文章介绍,XML作为电子商务中数据交换,已经有其不可替代的作用,但是在平时系统开发中,我们不一定都用到数据交换,是不是无法使用XML了?当然不是,现在已经有一个新趋势,java程序的配置文件都开始使用XML格式,以前是使用类似windows的INI格式。
(Java中也有Propertiesy这样的类专门处理这样的属性配置文件)。
使用XML作为Java的配置文件有很多好处,从Tomcat的安装配置文件和J2ee的配置文件中,我们已经看到XML的普遍应用,让我们也跟随流行趋势用XML武装起来。
现在关键是如何读取XML配置文件?有好几种XML解读器:主要有DOM和SAX ,这些区别网上文章介绍很多。
在apache的XML工程组中,目前有Xerces Xalan Cocoon 几个开发XML相关技术的project.Tomcat本身使用的是 Sun 的JAXP,而其XSL Taglib project中使用Xerces解读器。
好了,上面都是比较烦人的理论问题,还是赶快切入XML的配置文件的读取吧。
在我们的程序中,通常要有一些根据主机环境确定的变量。
比如数据库访问用户名和密码,不同的主机可能设置不一样。
只要更改XML配置文件,就可以正常运行。
localhostsqlnameusernamepassword上面这个myenv.xml配置文件一般是放在tomcat的WEB-INF/classes目录下。
我们编制一个Java程序直接读取,将dbhost dbuserdbpassword提取出来供其他程序访问数据库用。
目前使用SAX比较的多,与DOM主要区别是 SAX是一行一行读取XML文件进行分析,适合比较大文件,DOM是一次性读入内存,显然不能对付大文件。
这里我们使用SAX解读,由于SAX 解读器不断在发展,网上有不少文章是针对老版本的。
如果你使用JDK1.4 ,可以参考使用SAX处理XML文档一文。
JavaXML解析的四种方法(连载)
JavaXML解析的四种⽅法(连载)1. xml简介 XML:指可扩展标记语⾔, Extensible Markup Language;类似HTML。
XML的设计宗旨是传输数据,⽽⾮显⽰数据。
⼀个xml⽂档实例:1 <?xml version="1.0" encoding="UTF-8"?>2 <company name="Tencent" address="深圳市南⼭区">3 <department deptNo="001" name="development">4 <employee id="devHead" position="minister">许刚</employee>5 <employee position="developer">⼯程师A</employee>6 </department>7 <department deptNo="002" name="education">8 <employee position="minister" telephone="1234567">申林</employee>9 <employee position="trainee">实习⽣A</employee>10 </department>11 </company> 第⼀⾏是 XML 声明。
它定义 XML 的版本 (1.0) 和所使⽤的编码. 下⼀⾏描述⽂档的根元素:<company>开始,该根元素具有2个属性“name”,"address"。
如果在java类中获取xml文件里面的标签里面的内容。
如果在java类中获取xml⽂件⾥⾯的标签⾥⾯的内容。
import java.io.IOException;import java.io.InputStream;import java.util.HashMap;import java.util.Map;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;import com.sun.javafx.sg.prism.web.NGWebView;import sun.security.x509.KeyIdentifier;public class getXML {public Document getDocument(){Document doc=null;//xml⽂件的绝对路径。
InputStream in=Thread.currentThread().getContextClassLoader().getResourceAsStream(".xml");try {doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(in);} catch (SAXException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ParserConfigurationException e) {// TODO Auto-generated catch blocke.printStackTrace();}return doc;}public void getTags(){Document doc=this.getDocument();//获取xml⽂件⾥<action>元素。
java读取xml文件的四种方法
System.o ut.print ln("车主 地址:"+ ((Elemen t) allChild ren.get( i)).getC hild("AD DR").get Text());
17. }
18. } catch (Excepti on e) {
19.
e.printS tackTrac e();
15. File
f = new File("da ta_10k.x ml");
16.
Document BuilderF actory factory = Document BuilderF actory.n ewInstan ce();
17.
Document Builder builder = factory. newDocum entBuild er();
18.
System.o ut.print ln("车主 地址:" + foo.elem entText( "ADDR")) ; 19.
}
20. } catch (Excepti on e) {
21.
e.printS tackTrac e();
22. } 23. }
24. }
import java.io.*; import java.util.*; import org.dom4j. *; import org.dom4j.i o.*;
System.out .println("车 主地址:"+ doc.getEle mentsByTa gName("A DDR").item (i).getFirst Child().get NodeValue ());
Java获取xml里的数据
Java获取xml⾥的数据xml是⼀种可扩展的标记语⾔,可以⽤来存储和传输数据。
在java⾥⾯我们可以调⽤相关的⽅法来访问到它。
package com.bikeqx.test;import java.io.IOException;import javax.xml.parsers.*;import org.w3c.dom.*;import org.xml.sax.SAXException;public class Mian {public static void main(String[] args) {// TODO Auto-generated method stubDocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();DocumentBuilder db = null;try {db = dbf.newDocumentBuilder();} catch (ParserConfigurationException e) {// TODO Auto-generated catch blockSystem.out.println("⽆法获取该对象");}//加载xml⽂件try {Document document = db.parse("test1.xml");NodeList nodelist = document.getElementsByTagName("name");//遍历所有的书for(int i = 0;i < nodelist.getLength();i++){Node book = nodelist.item(i);System.out.println(book.getTextContent());}/*for(Node n:nodelist){}*/}catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}其中test1.xml的内容如下<?xml version="1.0" encoding="utf-8"?><books><book><name>JAVA</name><price> 1.0</price></book><book><name>Android</name><price>2.0</price></book><book><name>Html Css JavaScript</name><price>3.0</price></book></books>⽤上⾯的java代码我们可以轻松的获取到xml的document对象树模型,⽤它来访问到我们想要访问的数据,整体操作和js⾥的dom树基本没什么区别。
java 解析xml方法
java 解析xml方法在Java中,有许多库可以用于解析XML文档。
其中,DOM和SAX 是最常用的两种。
DOM是一种基于树结构的解析方式,而SAX是一种基于事件的解析方式。
1.DOM解析XMLDOM解析器将整个XML文档读入内存,并将其转换为一个树形结构。
这个树形结构可以使用Document Object Model (DOM) API来访问。
DOM解析器可以很容易地遍历这个树形结构,并提取出需要的元素和属性。
下面是一个使用DOM解析器读取XML文件的示例:```javaDocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(newFile('example.xml'));Element root = document.getDocumentElement();NodeList nodeList = root.getElementsByTagName('book'); for (int i = 0; i < nodeList.getLength(); i++) {Node node = nodeList.item(i);if (node.getNodeType() == Node.ELEMENT_NODE) {Element element = (Element) node;String title =element.getElementsByTagName('title').item(0).getTextConten t();String author =element.getElementsByTagName('author').item(0).getTextConte nt();System.out.println('Title: ' + title + ', Author: ' + author);}}```在这个例子中,我们使用了DocumentBuilderFactory和DocumentBuilder类来创建一个DOM解析器。
使用java解析xml文件
JAVA解析XML的四种方法比较JA V A解析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),XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已。
基本的解析方式有两种,一种叫SAX,另一种叫DOM。
SAX是基于事件流的解析,DOM是基于XML文档树结构的解析。
假设我们XML的内容和结构如下:view plaincopy to clipboardprint?<?xml version=”1.0″ encoding=”UTF-8″?> <employees><employee><name>ddviplinux</name><sex>m</sex><age>30</age></employee></employees><?xml version=”1.0″ encoding=”UTF-8″?> <employees><employee><name>ddviplinux</name><sex>m</sex><age>30</age></employee></employees>本文使用JA V A语言来实现DOM与SAX的XML文档生成与解析。
读写XML的四种方法
读写XML的四种方法XML(eXtensible Markup Language)是一种用于表示和传输数据的标记语言。
它具有良好的可读性和扩展性,被广泛应用于Web开发、数据交换和配置文件等领域。
在读写和处理XML数据时,有许多方法可供选择。
本文将介绍四种常见的读写XML的方法:DOM、SAX、JDOM、和XMLStreamReader/XMLStreamWriter。
1. DOM(Document Object Model):DOM是一种基于树形结构的解析器,它将整个XML文档加载到内存中,并将其表示为一个对象树。
在DOM中,每个XML元素都被表示为一个节点(Node),可以通过节点的属性和方法对其进行操作。
读取XML文档时,可以使用DOM解析器将其转换为一个DOM树,然后通过节点的方法访问和修改树结构。
写入XML文档时,可以通过创建和修改节点来构建DOM树,并使用DOM解析器将其保存为XML文档。
使用DOM读取XML文档的基本步骤如下:- 创建一个DocumentBuilderFactory对象。
- 根据DocumentBuilderFactory对象创建一个DocumentBuilder对象。
- 使用DocumentBuilder对象解析XML文档,并返回一个Document对象。
- 通过Document对象的方法遍历和操作XML文档的节点。
使用DOM写入XML文档的基本步骤如下:- 创建一个DocumentBuilderFactory对象。
- 根据DocumentBuilderFactory对象创建一个DocumentBuilder对象。
- 使用DocumentBuilder对象创建一个Document对象。
- 通过Document对象的方法创建和添加元素节点、属性节点等。
- 使用TransformerFactory和Transformer对象将Document对象保存为XML文档。
DOM的优点是易于使用和理解,可以方便地遍历和修改XML文档。
Java读取XML文件
Java读取XML⽂件使⽤Java读取XML⽂件有四种⽅式:1. DOM2. SAX3. JDOM4. DOM4jbook.xml⽂件内容:1<?xml version="1.0" encoding="UTF-8"?>2<书架>3<书>4<书名编号="a_1">JavaWeb程序开发⼊门</书名>5<作者分类="AA">传智播客</作者>6<售价单位="元">60</售价>7</书>8<书>9<书名编号="a_2">JavaWeb从⼊门到精通</书名>10<作者分类="BB">明⽇科技</作者>11<售价>80</售价>12</书>13<书>14<书名编号="a_3">计算机⽂化基础</书名>15<作者分类="CC">⼭东商务</作者>16<售价>40</售价>17</书>18</书架>1.DOMDOM 解析 XML 的步骤:1) 创建⼀个 DocumentBuilderFactory 的对象。
2) 创建⼀个 DocumentBuilder 对象。
3) 通过DocumentBuilder的parse(...)⽅法得到Document对象。
4) 通过 getElementsByTagName(...)⽅法获取到节点的列表。
5) 通过 for 循环遍历每⼀个节点。
6) 得到每个节点的属性和属性值。
7) 得到每个节点的节点名和节点值。
java mybatis 读取xml的方法
java mybatis 读取xml的方法在使用Java开发中,Mybatis是一个强大的ORM框架,能够帮助我们简化操作数据库的过程。
在Mybatis中,我们可以使用xml文件来定义SQL语句,然后通过Java代码来读取这些xml文件。
要读取Mybatis的xml文件,我们首先需要配置Mybatis的环境和数据源。
这可以通过在代码中使用Mybatis的Configuration类来实现。
接着,我们需要创建一个SqlSessionFactory对象,该对象可以通过SqlSessionFactoryBuilder类的实例来构建。
然后,我们可以通过SqlSessionFactory对象来创建一个SqlSession,SqlSession 是Mybatis提供的一个用于执行SQL操作的接口。
一旦我们获取了SqlSession对象,我们就可以通过它来执行数据库的操作。
在执行查询操作时,我们可以使用SqlSession的selectOne或selectList方法,这些方法可以接受一个SQL语句的ID作为参数,从而读取对应的xml文件中定义的SQL 语句。
例如:```javaSqlSession sqlSession = sqlSessionFactory.openSession();List<User> userList =sqlSession.selectList("erMapper.findAllUsers");```在上面的代码中,我们通过SqlSession的selectList方法读取了名为"findAllUsers"的SQL语句。
这个SQL语句对应于一个xml文件中的标签。
返回的结果是一个包含用户信息的列表。
除了查询操作之外,我们还可以通过SqlSession执行插入、更新和删除等操作。
同样地,我们可以在xml文件中定义相应的SQL语句来执行这些操作。
Java文件操作①——XML文件的读取
Java⽂件操作①——XML⽂件的读取⼀、邂逅XML⽂件种类是丰富多彩的,XML作为众多⽂件类型的⼀种,经常被⽤于数据存储和传输。
所以XML在现今应⽤程序中是⾮常流⾏的。
本⽂主要讲Java解析和⽣成XML。
⽤于不同平台、不同设备间的数据共享通信。
XML⽂件的表现:以“.xml”为⽂件扩展名的⽂件; 存储结构:树形结构;节点名称区分⼤⼩写。
1、<book id="1"></book> id为属性, <book><id>1</id></book> id为节点2、xml⽂件开头要加上版本信息和编码⽅式<?xml version="1.0" encoding="UTF-8"?>⽐如:❤为什么要使⽤XML?思考1:不同应⽤程序之间的通信?思考2:不同平台间的通信?思考3:不同平台间的数据共享?答案就是我们要学习的XML⽂件。
我们可以使⽤相同的xml把不同的⽂件联系起来⼆、应⽤ DOM ⽅式解析 XML❤在Java程序中如何获取XML⽂件的内容解析的⽬的:获取节点名、节点值、属性名、属性值;四种解析⽅式:DOM、SAX、DOM4J、JDOMDOM、SAX :java 官⽅⽅式,不需要下载jar包DOM4J、JDOM :第三⽅,需要⽹上下载jar包⽰例:解析XML⽂件,⽬标是解析XML⽂件后,Java程序能够得到xml⽂件的所有数据思考:如何在Java程序中保留xml数据的结构?如何保留节点之间的层级关系?注意常⽤的节点类型:下⾯介绍DOM⽅式解析XML:功能说明:代码⽰例:1package com.study.domtest;23import java.io.IOException;45import javax.xml.parsers.DocumentBuilder;6import javax.xml.parsers.DocumentBuilderFactory;7import javax.xml.parsers.ParserConfigurationException;89import org.w3c.dom.Document;10import dNodeMap;11import org.w3c.dom.Node;12import org.w3c.dom.NodeList;13import org.xml.sax.SAXException;1415/**16 * DOM⽅式解析xml17*/18public class DOMTest {1920public static void main(String[] args) {21//1、创建⼀个DocumentBuilderFactory的对象22 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();23//2、创建⼀个DocumentBuilder的对象24try {25//创建DocumentBuilder对象26 DocumentBuilder db = dbf.newDocumentBuilder();27//3、通过DocumentBuilder对象的parser⽅法加载books.xml⽂件到当前项⽬下28/*注意导⼊Document对象时,要导⼊org.w3c.dom.Document包下的*/29 Document document = db.parse("books.xml");//传⼊⽂件名可以是相对路径也可以是绝对路径30//获取所有book节点的集合31 NodeList bookList = document.getElementsByTagName("book");32//通过nodelist的getLength()⽅法可以获取bookList的长度33 System.out.println("⼀共有" + bookList.getLength() + "本书");34//遍历每⼀个book节点35for (int i = 0; i < bookList.getLength(); i++) {36 System.out.println("=================下⾯开始遍历第" + (i + 1) + "本书的内容================="); 37//❤未知节点属性的个数和属性名时:38//通过 item(i)⽅法获取⼀个book节点,nodelist的索引值从0开始39 Node book = bookList.item(i);40//获取book节点的所有属性集合41 NamedNodeMap attrs = book.getAttributes();42 System.out.println("第 " + (i + 1) + "本书共有" + attrs.getLength() + "个属性");43//遍历book的属性44for (int j = 0; j < attrs.getLength(); j++) {45//通过item(index)⽅法获取book节点的某⼀个属性46 Node attr = attrs.item(j);47//获取属性名48 System.out.print("属性名:" + attr.getNodeName());49//获取属性值50 System.out.println("--属性值" + attr.getNodeValue());51 }52//❤已知book节点有且只有1个id属性:53/*54 //前提:已经知道book节点有且只能有1个id属性55 //将book节点进⾏强制类型转换,转换成Element类型56 Element book1 = (Element) bookList.item(i);57 //通过getAttribute("id")⽅法获取属性值58 String attrValue = book1.getAttribute("id");59 System.out.println("id属性的属性值为" + attrValue);60*/6162//解析book节点的⼦节点63 NodeList childNodes = book.getChildNodes();64//遍历childNodes获取每个节点的节点名和节点值65 System.out.println("第" + (i+1) + "本书共有" + childNodes.getLength() + "个⼦节点");66for (int k = 0; k < childNodes.getLength(); k++) {67//区分出text类型的node以及element类型的node68if(childNodes.item(k).getNodeType() == Node.ELEMENT_NODE){69//获取了element类型节点的节点名70 System.out.print("第" + (k + 1) + "个节点的节点名:" + childNodes.item(k).getNodeName());71//获取了element类型节点的节点值72 System.out.println("--节点值是:" + childNodes.item(k).getFirstChild().getNodeValue());73// System.out.println("--节点值是:" + childNodes.item(k).getTextContent());74 }75 }76 System.out.println("======================结束遍历第" + (i + 1) + "本书的内容=================");77 }7879 } catch (ParserConfigurationException e) {80 e.printStackTrace();81 } catch (SAXException e) {82 e.printStackTrace();83 } catch (IOException e) {84 e.printStackTrace();85 }86 }8788 }三、应⽤ SAX ⽅式解析 XMLSAX是SIMPLE API FOR XML的缩写,与DOM⽐较⽽⾔,SAX是⼀种轻量型的⽅法。
JAVA对XML文件的读写
JAVA对XML⽂件的读写转载⾃:XML 指可扩展标记语⾔(EXtensible Markup Language),是独⽴于软件和硬件的信息传输⼯具,应⽤于 web 开发的许多⽅⾯,常⽤于简化数据的存储和共享。
xml指令处理指令,简称PI (processing instruction)。
处理指令⽤来指挥解析引擎如何解析XML⽂档内容。
以下为例:在XML中,所有的处理指令都以结束。
<?后⾯紧跟的是处理指令的名称。
XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。
元素可包含其他元素、⽂本或者两者的混合物。
元素也可以拥有属性。
XML 元素可以在开始标签中包含属性,属性 (Attribute) 提供关于元素的额外(附加)信息。
属性通常提供不属于数据组成部分的信息,但是对需要处理这个元素的应⽤程序来说却很重要。
XML 属性必须加引号,属性值必须被引号包围,不过单引号和双引号均可使⽤。
如果属性值本⾝包含双引号,那么有必要使⽤单引号包围它,或者可以使⽤实体引⽤。
进⼊主题了⾸先要有⼀个xml⽂件为名字为emplist.xml内容如下1<?xml version="1.0" encoding="UTF-8"?>2<list>3<emp id="">4<name>张三</name>5<age></age>6<gender>男</gender>7<salary>5000</salary>8</emp>910</list>XML解析⽅式SAX解析⽅式SAX(simple API for XML)是⼀种XML解析的替代⽅法。
相⽐于DOM,SAX是⼀种速度更快,更有效的⽅法。
它逐⾏扫描⽂档,⼀边扫描⼀边解析。
java解析xml的几种方式
java解析xml的⼏种⽅式第⼀种:DOM。
DOM的全称是Document Object Model,也即⽂档对象模型。
在应⽤程序中,基于DOM的XML分析器将⼀个XML⽂档转换成⼀个对象模型的集合(通常称DOM树),应⽤程序正是通过对这个对象模型的操作,来实现对XML⽂档数据的操作。
通过DOM接⼝,应⽤程序可以在任何时候访问XML⽂档中的任何⼀部分数据,因此,这种利⽤DOM 接⼝的机制也被称作随机访问机制。
DOM接⼝提供了⼀种通过分层对象模型来访问XML⽂档信息的⽅式,这些分层对象模型依据XML的⽂档结构形成了⼀棵节点树。
⽆论XML ⽂档中所描述的是什么类型的信息,即便是制表数据、项⽬列表或⼀个⽂档,利⽤DOM所⽣成的模型都是节点树的形式。
也就是说,DOM 强制使⽤树模型来访问XML⽂档中的信息。
由于XML本质上就是⼀种分层结构,所以这种描述⽅法是相当有效的。
DOM树所提供的随机访问⽅式给应⽤程序的开发带来了很⼤的灵活性,它可以任意地控制整个XML⽂档中的内容。
然⽽,由于DOM分析器把整个XML⽂档转化成DOM树放在了内存中,因此,当⽂档⽐较⼤或者结构⽐较复杂时,对内存的需求就⽐较⾼。
⽽且,对于结构复杂的树的遍历也是⼀项耗时的操作。
所以,DOM分析器对机器性能的要求⽐较⾼,实现效率不⼗分理想。
不过,由于DOM分析器所采⽤的树结构的思想与XML⽂档的结构相吻合,同时鉴于随机访问所带来的⽅便,因此,DOM分析器还是有很⼴泛的使⽤价值的。
Java代码1. import java.io.File;2.3. import javax.xml.parsers.DocumentBuilder;4. import javax.xml.parsers.DocumentBuilderFactory;5.6. import org.w3c.dom.Document;7. import org.w3c.dom.Element;8. import org.w3c.dom.NodeList;9.10. public class DomTest111. {12. public static void main(String[] args) throws Exception13. {14. // step 1: 获得dom解析器⼯⼚(⼯作的作⽤是⽤于创建具体的解析器)15. DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();16.17. // System.out.println("class name: " + dbf.getClass().getName());18.19. // step 2:获得具体的dom解析器20. DocumentBuilder db = dbf.newDocumentBuilder();21.22. // System.out.println("class name: " + db.getClass().getName());23.24. // step3: 解析⼀个xml⽂档,获得Document对象(根结点)25. Document document = db.parse(new File("candidate.xml"));26.27. NodeList list = document.getElementsByTagName("PERSON");28.29. for(int i = 0; i < list.getLength(); i++)30. {31. Element element = (Element)list.item(i);32.33. String content = element.getElementsByTagName("NAME").item(0).getFirstChild().getNodeValue();34.35. System.out.println("name:" + content);36.37. content = element.getElementsByTagName("ADDRESS").item(0).getFirstChild().getNodeValue();38.39. System.out.println("address:" + content);40.41. content = element.getElementsByTagName("TEL").item(0).getFirstChild().getNodeValue();42.43. System.out.println("tel:" + content);44.45. content = element.getElementsByTagName("FAX").item(0).getFirstChild().getNodeValue();47. System.out.println("fax:" + content);48.49. content = element.getElementsByTagName("EMAIL").item(0).getFirstChild().getNodeValue();50.51. System.out.println("email:" + content);52.53. System.out.println("--------------------------------------");54. }55. }56. }Java代码1. import java.io.File;2.3. import javax.xml.parsers.DocumentBuilder;4. import javax.xml.parsers.DocumentBuilderFactory;5.6. import org.w3c.dom.Attr;7. import ment;8. import org.w3c.dom.Document;9. import org.w3c.dom.Element;10. import dNodeMap;11. import org.w3c.dom.Node;12. import org.w3c.dom.NodeList;13.14. /**15. * 使⽤递归解析给定的任意⼀个xml⽂档并且将其内容输出到命令⾏上16. * @author zhanglong17. *18. */19. public class DomTest320. {21. public static void main(String[] args) throws Exception22. {23. DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();24. DocumentBuilder db = dbf.newDocumentBuilder();25.26. Document doc = db.parse(new File("student.xml"));27. //获得根元素结点28. Element root = doc.getDocumentElement();29.30. parseElement(root);31. }32.33. private static void parseElement(Element element)34. {35. String tagName = element.getNodeName();36.37. NodeList children = element.getChildNodes();38.39. System.out.print("<" + tagName);40.41. //element元素的所有属性所构成的NamedNodeMap对象,需要对其进⾏判断42. NamedNodeMap map = element.getAttributes();43.44. //如果该元素存在属性45. if(null != map)46. {47. for(int i = 0; i < map.getLength(); i++)48. {49. //获得该元素的每⼀个属性50. Attr attr = (Attr)map.item(i);51.52. String attrName = attr.getName();54.55. System.out.print(" " + attrName + "=\"" + attrValue + "\"");56. }57. }58.59. System.out.print(">");60.61. for(int i = 0; i < children.getLength(); i++)62. {63. Node node = children.item(i);64. //获得结点的类型65. short nodeType = node.getNodeType();66.67. if(nodeType == Node.ELEMENT_NODE)68. {69. //是元素,继续递归70. parseElement((Element)node);71. }72. else if(nodeType == Node.TEXT_NODE)73. {74. //递归出⼝75. System.out.print(node.getNodeValue());76. }77. else if(nodeType == MENT_NODE)78. {79. System.out.print("<!--");80.81. Comment comment = (Comment)node;82.83. //注释内容84. String data = comment.getData();85.86. System.out.print(data);87.88. System.out.print("-->");89. }90. }91.92. System.out.print("</" + tagName + ">");93. }94. }sax:SAX的全称是Simple APIs for XML,也即XML简单应⽤程序接⼝。
JAVA读取XML文件
JAVA读取XML⽂件解析XML的步骤如下:1.创建DocumentBuilder⼯⼚2.创建DocumentBuilder对象3.DocumentBuilder对象的parse⽅法得到Document对象4.Document对象的getElementsByTagName得到NodeList集合5.通过getFirstChild和getNextSibling进⾏遍历⽤到的包:import javax.xml.parsers.*;import org.w3c.dom.*;import org.xml.sax.*;⽤到的对象:DocumentBuilderFactory:创建DocumentBuilder的抽象⼯⼚DocumentBuilder:可以从 XML 获取⼀个 DocumentDocument:提供供对⽂档数据的基本访问⽤到的⽅法:DocumentBuilder.parse(String)':将给定 URI 的内容解析为⼀个 XML ⽂档,并且返回⼀个新的 DOM Document对象Document.getElementsByTagName(String)':返回具有给定标记名称的所有Element的NodeListElement.getAttribute(String)':通过名称获得属性值下⾯来解析⼀个XML⽂件1import javax.xml.parsers.*;2import org.w3c.dom.*;3import org.xml.sax.*;45public class Test6 {7public static void main(String[] args)8 {9 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();10try11 {12 DocumentBuilder db = dbf.newDocumentBuilder();13 Document doc = db.parse("pet2.xml");1415 NodeList dogList = doc.getElementsByTagName("dog");16 System.out.println("共有" + dogList.getLength() + "个dog节点");17for (int i = 0; i < dogList.getLength(); i++)18 {19 Node dog = dogList.item(i);20 Element elem = (Element) dog;21 System.out.println("id:" + elem.getAttribute("id"));22for (Node node = dog.getFirstChild(); node != null; node = node.getNextSibling())23 {24if (node.getNodeType() == Node.ELEMENT_NODE)25 {26 String name = node.getNodeName();27 String value = node.getFirstChild().getNodeValue();28 System.out.print(name + ":" + value + "\t");29 }30 }31 System.out.println();32 }33 }34catch (Exception e)35 {36 e.printStackTrace();37 }38 }39 }XML⽂件1 <pets>2 <dogs>3 <dog id="1">4 <name>YAYA</name>5 <health>100</health>6 <love>0</love>7 <strain>酷酷的雪娜瑞</strain>8 </dog>9 <dog id="2">10 <name>OUOU</name>11 <health>90</health>12 <love>15</love>13 <strain>聪明的拉布拉多⽝</strain>14 </dog>15 </dogs>16 <penguins>17 <penguin id="3">18 <name>QQ</name>19 <health>100</health>20 <love>20</love>21 <sex>Q仔</sex>22 </penguin>23 </penguins>24 </pets>。
java读取XML文件内容的四种方法
Java parse XML methods(4)关键字: xml1. 介绍1>DOM(JAXP Crimson解析器)DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。
DOM是以层次结构组织的节点或信息片断的集合。
这个层次结构允许开发人员在树中寻找特定信息。
分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。
由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。
DOM 以及广义的基于树的处理具有几个优点。
首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。
它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。
DOM使用起来也要简单得多。
2>SAXSAX处理的优点非常类似于流媒体的优点。
分析能够立即开始,而不是等待所有的数据被处理。
而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。
这对于大型文档来说是个巨大的优点。
事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。
一般来说,SAX还比它的替代者DOM快许多。
选择DOM还是选择SAX?对于需要自己编写代码来处理XML文档的开发人员来说,选择DOM还是SAX解析模型是一个非常重要的设计决策。
DOM采用建立树形结构的方式访问XML文档,而SAX 采用的事件模型。
DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。
用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用 navigation APIs访问所需的树节点来完成任务。
可以很容易的添加和修改树中的元素。
然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。
由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。
SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。
java读写Xml的方法
在java环境下读取xml文件的方法主要有4种:DOM、SAX、JDOM、JAXB1. DOM(Document Object Model)此方法主要由W3C提供,它将xml文件全部读入内存中,然后将各个元素组成一棵数据树,以便快速的访问各个节点。
因此非常消耗系统性能,对比较大的文档不适宜采用DOM 方法来解析。
DOM API 直接沿袭了XML 规范。
每个结点都可以扩展的基于Node 的接口,就多态性的观点来讲,它是优秀的,但是在Java 语言中的应用不方便,并且可读性不强。
实例:import javax.xml.parsers.*;//XML解析器接口import org.w3c.dom.*;//XML的DOM实现import org.apache.crimson.tree.XmlDocument;//写XML文件要用到DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//允许名字空间factory.setNamespaceAware(true);//允许验证factory.setValidating(true);//获得DocumentBuilder的一个实例try {DocumentBuilder builder = factory.newDocumentBuilder();} catch (ParserConfigurationException pce) {System.err.println(pce);// 出异常时输出异常信息,然后退出,下同System.exit(1);}//解析文档,并获得一个Document实例。
try {Document doc = builder.parse(fileURI);} catch (DOMException dom) {System.err.println(dom.getMessage());System.exit(1);} catch (IOException ioe) {System.err.println(ioe);System.exit(1);}//获得根节点StuInfoElement elmtStuInfo = doc.getDocumentElement();//得到所有student节点NodeList nlStudent = elmtStuInfo.getElementsByTagNameNS(strNamespace, "student");for (……){//当前student节点元素Element elmtStudent = (Element)nlStudent.item(i);NodeList nlCurrent = elmtStudent.getElementsByTagNameNS(strNamespace, "name");}对于读取得方法其实是很简单的,写入xml文件也是一样不复杂。
Java如何读取XML文件具体实现
Java如何读取XML⽂件具体实现今天的CSDN常见问题来讲解下在Java中如何读取XML⽂件的内容。
直接上代码吧,注释写的很清楚了!复制代码代码如下:import java.io.*;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;public class XMLReaderTest {public static void main(String args[]) {Element element = null;// 可以使⽤绝对路劲File f = new File("test.xml");// documentBuilder为抽象不能直接实例化(将XML⽂件转换为DOM⽂件)DocumentBuilder db = null;DocumentBuilderFactory dbf = null;try {// 返回documentBuilderFactory对象dbf = DocumentBuilderFactory.newInstance();// 返回db对象⽤documentBuilderFatory对象获得返回documentBuildr对象db = dbf.newDocumentBuilder();// 得到⼀个DOM并返回给document对象Document dt = db.parse(f);// 得到⼀个elment根元素element = dt.getDocumentElement();// 获得根节点System.out.println("根元素:" + element.getNodeName());// 获得根元素下的⼦节点NodeList childNodes = element.getChildNodes();// 遍历这些⼦节点for (int i = 0; i < childNodes.getLength(); i++) {// 获得每个对应位置i的结点Node node1 = childNodes.item(i);if ("Account".equals(node1.getNodeName())) {// 如果节点的名称为"Account",则输出Account元素属性typeSystem.out.println("\r\n找到⼀篇账号. 所属区域: " + node1.getAttributes().getNamedItem("type").getNodeValue() + ". "); // 获得<Accounts>下的节点NodeList nodeDetail = node1.getChildNodes();// 遍历<Accounts>下的节点for (int j = 0; j < nodeDetail.getLength(); j++) {// 获得<Accounts>元素每⼀个节点Node detail = nodeDetail.item(j);if ("code".equals(detail.getNodeName())) // 输出codeSystem.out.println("卡号: " + detail.getTextContent());else if ("pass".equals(detail.getNodeName())) // 输出passSystem.out.println("密码: " + detail.getTextContent());else if ("name".equals(detail.getNodeName())) // 输出nameSystem.out.println("姓名: " + detail.getTextContent());else if ("money".equals(detail.getNodeName())) // 输出moneySystem.out.println("余额: " + detail.getTextContent());}}}}catch (Exception e) {e.printStackTrace();}}}然后我们测试的XML⽂件(test.xml)要放在项⽬⼯程的根⽬录下,其内容是:复制代码代码如下:<?xml version="1.0" encoding="gbk"?><Accounts><Account type="type1"><code>100001</code><pass>123</pass><name>李四</name><money>1000000.00</money></Account><Account type="type2"><code>100002</code><pass>123</pass><name>张三</name><money>1000.00</money></Account></Accounts>根元素:Accounts找到⼀篇账号. 所属区域: type1.卡号: 100001密码: 123姓名: 李四余额: 1000000.00找到⼀篇账号. 所属区域: type2.卡号: 100002密码: 123姓名: 张三余额: 1000.00。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
tags.push(qName); }
}
3)JDOM
package com.aaron.xml;
import java.io.*; import java.util.*; import org.jdom.*; import org.jdom.input.*;
SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给 定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通 常会比较低,因为它让开发人员自己来决定所要处理的tag。特别是当开发人员只需要处理文档中 所包含的部分数据时,SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较 困难,而且很难同时访问同一个文档中的多处不同数据。
3)SAX表现较好,这要依赖于它特定的解析方式-事件驱动。一个SAX检测即将到来的XML流,但并 没有载入到内存(当然当XML流被读入时,会有部分文档暂时隐藏在内存中)。
3. 四种xml操作方式的基本使用方法
xml文件: >?xml version="1.0" encoding="UTF8"?< > RESULT<
2.. 比较
1)DOM4J性能最好,连Sun的JAXM也在用DOM4J。目前许多开源项目中大量采用DOM4J,例如大名 鼎鼎的Hibernate也用DOM4J来读取XML配置文件。如果不考虑可移植性,那就采用DOM4J.
2)JDOM和DOM在性能测试时表现不佳,在测试10M文档时内存溢出。在小文档情况下还值得考虑使 用DOM和JDOM。虽然JDOM的开发者已经说明他们期望在正式发行版前专注性能问题,但是从性能观 点来看,它确实没有值得推荐之处。另外,DOM仍是一个非常好的选择。DOM实现广泛应用于多种编 程语言。它还是许多其它与XML相关的标准的基础,因为它正式获得W3C推荐(与基于非标准的Java 模型相对),所以在某些类型的项目中可能也需要它(如在 JavaScript中使用DOM)。
public class Sax extends DefaultHandler {
java.util.Stack tags = new java.util.Stack();
public Sax() { super(); }
public static void main(String args[]) { long lasting = System.currentTimeMillis(); try {
String tag = (String) tags.peek(); if (tag.equals("NO")) {
System.out.print("Code:" + new String(ch, start, length)); } if (tag.equals("ADDR")) {
System.out.println("Addr:" + new String(ch, start, length)); } }
> VALUE< > NO<A1234> /NO<
> ADDR<airport NCS>/ADDR< > /VALUE<
> VALUE< >NO<B1234> /NO<
> ADDR<seagate llc>/ADDR< > /VALUE< > /RESULT<
SAXParserFactory sf = SAXParserFactory.newInstance(); SAXParser sp = sf.newSAXParser(); Sax reader = new Sax(); sp.parse(new InputSource("c:/work/project/xml/aaron.xml"), reader); } catch (Exception e) { e.printStackTrace(); }
JDOM与DOM主要有两方面不同。首先,JDOM仅使用具体类而不使用接口。这在某些方面简化了 API,但是也限制了灵活性。第二,API大量使用了Collections类,简化了那些已经熟悉这些类 的Java开发者的使用。
JDOM文档声明其目的是“使用20%(或更少)的精力解决80%(或更多)Java/XML问题”(根据学 习曲线假定为20%)。JDOM对于大多数 Java/XML应用程序来说当然是有用的,并且大多数开发者 发现API比DOM容易理解得多。JDOM还包括对程序行为的相当广泛检查以防止用户做任何在XML中 无意义的事。然而,它仍需要您充分理解XML以便做一些超出基本的工作(或者甚至理解某些情况下 的错误)。这也许是比学习DOM或JDOM接口都更有意义的工作。
出基本XML文档表示的功能,包括集成的XPath支持、 XML Schema支持以及用于大文档或流化文 档的基于事件的处理。它还提供了构建文档表示的选项,它通过DOM4J API和标准DOM接口具有并 行访问功能。从2000下半年开始,它就一直处于开发之中。
为支持所有这些功能,DOM4J使用接口和抽象基本类方法。DOM4J大量使用了API中的 Collections类,但是在许多情况下,它还提供一些替代方法以允许更好的性能或更直接的编码方 法。直接好处是,虽然DOM4J付出了更复杂的API的代价,但是它提供了比JDOM大得多的灵活性。
// long lasting =System.currentTimeMillis(); try {
File f = new File("c:/work/project/xml/aaron.xml"); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(f); NodeList nl = doc.getElementsByTagName("VALUE"); for (int i = 0; i < nl.getLength(); i++) {
2>SAX
SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。 而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文 档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时 停止解析。一般来说,SAX还比它的替代者DOM快许多。
JDOM自身不包含解析器。它通常使用SAX2解析器来解析和验证输入XML文档(尽管它还可以将 以前构造的 DOM表示作为输入)。它包含一些转换器以将JDOM表示输出成SAX2事件流、DOM模型或 XML文本文档。JDOM是在Apache许可证变体下发布的开放源码。
4>DOM4J 虽然DOM4J代表了完全独立的开发结果,但最初,它是JDOM的一种智能分支。它合并了许多超
在添加灵活性、XPath集成和对大文档处理的目标时,DOM4J的目标与JDOM是一样的:针对Java 开发者的易用性和直观操作。它还致力于成为比JDOM更完整的解决方案,实现在本质上处理所有 Java/XML问题的目标。在完成该目标时,它比JDOM更少强调防止不正确的应用程序行为。
DOM4J是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点, 同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写 XML,特别值得一提的是连Sun的JAXM也在用DOM4J。
选择DOM还是选择SAX?对于需要自己编写代码来处理XML文档的开发人员来说, 选择DOM还 是SAX解析模型是一个非常重要的设计决策。 DOM采用建立树形结构的方式访问XML文档,而SAX 采用的事件模型。
DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。用DOM解析模型的优 点是编程容易,开发人员只需要调用建树的指令,然后利用 navigation APIs访问所需的树节点 来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个 XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力, DOM解析器常用于XML文档需要频繁的改变的服务中。
Java parse XML methods(4) 关键字: xml 1. 介绍
1>DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点
或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整 个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于 树或基于对象的。DOM 以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的, 因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而 不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。
1)DOM
package com.aaron.xml;