第一:基本概念
1.第三种解析方式不是java官方提供的,而是第三方提供的,因此需要引入外部jar包。
因此dom4j要用的系统类都在外部jar包中,需要引入(前两种解析都是java官方的,系统类都在JRE System Libaray中)
2.解析的本质就是找到xml文件里面的内容饿锤biu的
3.dom4j的含义是从dom for java 意思是从dom解析到java。
dom解析把空格也当成节点,sax解析不能修改(增删改)文件。而dom4j解决这两个的缺点
4.Saxread是一个类(读),使用这个类创建一个Document对象,这个document是个接口,因此是创建了这个document接口的实现类(多肽)
通过document获得Element对象,Element也是个接口。
XmlWrite是写(输出),会用到outputFormat类,用于创建文档的时候规定格式。Saxread和XmlWrite是dom4j的主要类
5.DocumentHelp是个类,里面的方法都是静态的
6.dom4j能够改变物理文件,而以前的解析只是改变内存中的dom树
7.pcdata表示内容按照字符串进行解析。p是parse解析的意思,c是char是字符的意思
cdata:<![CDATA[]]>:按照文本解析,也就是按照普通字符串输出。也就是逃避解析
hot:fasle表示cdata的值是false
第二:读xml
package dom4jTest;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class TestRead {
public static void main(String[] args) {
SAXReader sr=new SAXReader();//创建dom4j的解析器
try{
Document doc=sr.read("src/book.xml");
Element rootEle=doc.getRootElement();//找到跟元素、
List<Element> elelist=rootEle.elements();//找到所有子元素,elelsit是个集合
Iterator<Element> it= elelist.iterator();//创建一个elelist的迭代器
while(it.hasNext()){
Element bookEle=it.next();
String name=bookEle.element("name").getTextTrim();//取出文本内容
String isbn=bookEle.attributeValue("isbn");//取出属性值
String author=bookEle.element("author").getTextTrim();
String price=bookEle.element("price").getTextTrim();
String pub=bookEle.element("publisher").getText();
System.out.println(name+"\t"+isbn+"\t"+author+"\t"+price+"\t"+pub);
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}
第三:写xml
package dom4jTest;
import java.io.FileOutputStream;
import java.io.OutputStream;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Text;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class TestWrite {
public static void main(String[] args) {
//第一步:创建元素
//创建节点
Element bookEle=DocumentHelper.createElement("book");
Attribute a = DocumentHelper.createAttribute(bookEle, "isbn", "3333");
///DocumentHelper.createA
bookEle.add(a);
//创建几个子节点
Element nameEle=DocumentHelper.createElement("name");
Element authorEle=DocumentHelper.createElement("author");
Element priceEle=DocumentHelper.createElement("price");
Element pubEle=DocumentHelper.createElement("publisher");
//创建几个文本节点
Text nameText=DocumentHelper.createText("三毛流浪记");
Text authorText=DocumentHelper.createText("三毛");
Text priceText=DocumentHelper.createText("222");
//Text pubText=DocumentHelper.createText("出版社");
pubEle.setText("出版社");
//第二步:添加元素,把子元素添加到父元素中
//对上面常见的东西进行组装
nameEle.add(nameText);
authorEle.add(authorText);
priceEle.add(priceText);
//pubEle.add(pubText);
bookEle.add(nameEle);
bookEle.add(authorEle);
bookEle.add(priceEle);
bookEle.add(pubEle);
//第三步:输出(写入)元素:把刚才添加的元素在xml文件中进行显示输出
try{
SAXReader sr=new SAXReader();
Document doc=sr.read("src/book.xml");
Element rootEle=doc.getRootElement();
rootEle.add(bookEle);
OutputStream os=new FileOutputStream("src/book.xml");//要输出的文件
OutputFormat of=new OutputFormat();//要输出的格式
of.setNewlines(true);//换行
of.setIndent(true);//缩进
//of.setEncoding("GBK");
XMLWriter xw = new XMLWriter(os,of);
xw.write(doc);
xw.flush();
}catch(Exception ex){
ex.printStackTrace();
}
}
}
第四:dom4j增删改查过程
package homework;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
//dom4j完成增删改查
public class Dom2 {
public void add(){
SAXReader sr = new SAXReader();
try{
Document doc=sr.read(new File("src/book.xml"));
Element root=doc.getRootElement();
Element book=root.addElement("book");
List<Element> b=root.elements();
book.addAttribute("isbn", "11011"+b.size());
Element name=book.addElement("name");
Element author=book.addElement("author");
Element price=book.addElement("price");
Element publisher=book.addElement("publisher");
name.setText("小二流浪记");
author.setText("小二");
price.setText("1");
publisher.setText("天津出版社");
//写
OutputStream os= new FileOutputStream("src/book.xml");
OutputFormat of=new OutputFormat();
of.setNewlines(true);
of.setIndent(true);
of.setIndent("\t");
XMLWriter write = new XMLWriter(os,of);//往os文件里写,写的格式是of
write.write(doc);//写入document
write.close();
}catch (Exception e) {
e.printStackTrace();
}
}
public void search() {
SAXReader sr = new SAXReader();
//XMLWriter write = new XMLWriter();
try{
Document doc=sr.read(new File("src/book.xml"));
Element rootEle=doc.getRootElement();//bookes
List<Element> elelist=rootEle.elements();//book
Iterator<Element> it = elelist.iterator();
while(it.hasNext()){
Element bookEle=it.next();
String name=bookEle.element("name").getTextTrim();//取出文本内容
String isbn=bookEle.attributeValue("isbn");//取出属性值
String author=bookEle.element("author").getTextTrim();
String price=bookEle.element("price").getTextTrim();
String pub=bookEle.element("publisher").getText();
System.out.println(name+"\t"+isbn+"\t"+author+"\t"+price+"\t"+pub);
}
}catch(Exception ex){
ex.printStackTrace();
}
}
public void del(){//可传入参数修改指定对象的属性
SAXReader sr = new SAXReader();
//XMLWriter write = new XMLWriter();
try{
Document doc=sr.read(new File("src/book.xml"));
Element rootEle=doc.getRootElement();//bookes
List<Element> elelist=rootEle.elements();//book
for(int x=0;x<elelist.size();x++){
if(x>1){
Element ele=elelist.get(x);
//System.out.println("最后一个是"+ele.getName());
boolean falg = rootEle.remove(ele);
}
}
OutputStream os= new FileOutputStream("src/book.xml");
OutputFormat of=new OutputFormat();
of.setNewlines(true);
of.setIndent(true);
of.setIndent("\t");
XMLWriter write = new XMLWriter(os,of);//往os文件里写,写的格式是of
write.write(doc);//写入document
write.close();
this.search();
}catch(Exception ex){
ex.printStackTrace();
}
}
/* public void update(){//可传入参数。。。。
SAXReader sr = new SAXReader();
//XMLWriter write = new XMLWriter();
try{
Document doc=sr.read(new File("src/book.xml"));
Element rootEle=doc.getRootElement();//bookes
List<Element> elelist=rootEle.elements();//book
for(int x=0;x<elelist.size();x++){
if(x==0){
Element ele=elelist.get(x);
ele.element("name").setText("修改");
}
}
OutputStream os= new FileOutputStream("src/book.xml");
OutputFormat of=new OutputFormat();
of.setNewlines(true);
of.setIndent(true);
of.setIndent("\t");
XMLWriter write = new XMLWriter(os,of);//往os文件里写,写的格式是of
write.write(doc);//写入document
write.close();
}catch(Exception ex){
ex.printStackTrace();
}
}*/
public void update(String id,String value){
SAXReader sr = new SAXReader();
//XMLWriter write = new XMLWriter();
try{
Document doc=sr.read(new File("src/book.xml"));
Element rootEle=doc.getRootElement();//bookes
List<Element> elelist=rootEle.elements();//book
for(int x=0;x<elelist.size();x++){
Element ele=elelist.get(x);
if(ele.attributeValue("isbn").equals(id)){
ele.element("name").setText(value);
}
}
OutputStream os= new FileOutputStream("src/book.xml");
OutputFormat of=new OutputFormat();
of.setNewlines(true);
of.setIndent(true);
of.setIndent("\t");
XMLWriter write = new XMLWriter(os,of);//往os文件里写,写的格式是of
write.write(doc);//写入document
write.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
public static void main(String[] args) {
Dom2 d= new Dom2();
//d.add();
//d.del();
//d.search();
//d.update();
d.update("100100","修改操作");
}
}
第五:把jdbc的四大参数封装到xml里
public class JdbcXml {
public static void main(String[] args) {
//Element pro=DocumentHelper.createElement("pro");
Document doc=DocumentHelper.createDocument();
Element pro=doc.addElement("pro");
Element d=pro.addElement("driver");
Element u=pro.addElement("url");
Element um=pro.addElement("uname");
Element p=pro.addElement("pwd");
d.setText("oracle.jdbc.driver.OracleDriver");
u.setText("jdbc:oracle:thin:@localhost:1521:ORCL");
um.setText("chu1");
p.setText("1234");
try{
OutputStream os=new FileOutputStream("src/a.xml");
OutputFormat of=new OutputFormat();
of.setNewlines(true);
of.setIndent(true);
//OutputFormat of=OutputFormat.createPrettyPrint();
of.setEncoding("GBK");//默认编码格式是utf8
XMLWriter write = new XMLWriter(os,of);
write.write(doc);
write.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
}
相关推荐
首先,DOM解析是一种将整个XML文档加载到内存中的解析方式,它构建了一个树形结构,允许开发者通过节点层级遍历和操作XML文档。DOM解析器读取XML文件后,会创建一个完整的DOM树,每个元素、属性、文本等都有对应的...
在JavaEE和J2EE开发中,DOM4J广泛应用于Web服务、数据交换、配置文件处理、XML数据绑定等领域。与其它XML库相比,DOM4J因其易用性和高效性而受到开发者青睐。 在项目中使用DOM4J时,通常会将其作为依赖库引入。`dom...
4. **DOM4J**:DOM4J是一个Java库,用于处理XML文档。它提供了灵活且强大的API,包括XML的读取、写入、修改和查询。DOM4J支持XPath表达式,使得在XML文档中查找特定数据变得简单。 5. **JSTL(JavaServer Pages ...
**J2EE Web服务:XML、SOAP、WSDL、UDDI、WS-I、JAX-RPC、JAXR、SAAJ、JAXP详解** 在IT领域,尤其是在Java企业级应用开发中,Web服务扮演着至关重要的角色。J2EE(Java 2 Platform, Enterprise Edition)提供了一...
《j2ee dom4j JavaScript struts2帮助文档》是一个包含多个技术领域的综合资源包,主要涉及Java企业级开发中的核心技术和工具。该压缩包包含了以下几个关键文件: 1. **J2EE研究文集.chm**:这是一部关于Java企业版...
- 高效:相比Java标准的DOM解析器,`dom4j`在性能上有所提升,且内存占用更低。 - 灵活:提供了丰富的API,支持XPath查询,使得操作XML更加简便。 - 扩展性强:可以与其他Java库如Hibernate、Spring等无缝集成。 ...
3. **解析XML资源**:在J2EE应用中,使用XML解析器(如DOM或SAX)加载XML资源文件,并将其转换为对象模型,以便于程序访问。 4. **选择正确的资源**:根据用户的语言设置,动态选择相应的XML资源文件。 5. **显示...
例如,JDBC的连接配置信息就常常写入XML文件,通过DOM(Document Object Model)或SAX(Simple API for XML)解析器读取。 在J2EE中,XML还与JNDI(Java Naming and Directory Interface)结合,用于在应用服务器中...
同时,了解如何利用XML工具,如DOM、SAX或StAX解析XML文档,以及XPath、XSLT和XQuery进行数据查询和转换,也是必不可少的技能。 总的来说,《Manning - J2EE and XML Development》这本书对于希望深入了解J2EE平台...
DOM解析器将整个XML文档加载到内存中,创建一个树形结构,允许开发者通过节点遍历来访问数据。这种方式适用于小型文件,但对大型XML文件来说,可能会占用大量内存资源。 相比之下,SAX解析器采用事件驱动模型,逐行...
本篇将详细讲解四个重要的J2EE相关库:Dom4j、Hibernate、Spring以及Struts,并通过它们的常用jar包来阐述各自的核心功能和使用方法。 1. **Dom4j**: Dom4j是一个开源的Java XML API,它提供了全面而强大的XML...
例如,通过使用简单的API for XML(SAX)和文档对象模型(DOM)解析XML文档,将数据加载到内存中的对象模型,便于处理和操作。此外,文档类型定义(DTDs)和XML Schema(schemas)用于定义XML文档的结构和约束,确保...
通常,开发者会使用如JAXB或DOM4J等更高级的库来处理XML,但XMLParser是理解XML解析基础的重要部分。 10. **Spring3**:Spring是一个全面的Java企业级应用开发框架,包括依赖注入、面向切面编程、事务管理等功能。...
XML 可以通过简单的 API for XML(SAX)和文档对象模型(DOM)进行解析,使得数据能够被程序处理。例如,上述的媒体管理系统的例子,XML文档描述了各种媒体资产的元数据,如名称、描述、类型和统一资源名(URN)。...
本文主要讲解了 Java 中如何读取 XML 配置文件,并对 XML 解析器进行了分类,分别介绍了 DOM 和 SAX 两种解析方式的特点和使用场景,并提供了一个使用 SAX 解析器读取 XML 配置文件的示例程序。 在 Java 开发中,...