`

j2ee11:xml02:dom4j解析

    博客分类:
  • j2ee
 
阅读更多

第一:基本概念

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();
  }
 }

}

 

  • 大小: 106.9 KB
  • 大小: 276 KB
分享到:
评论

相关推荐

    j2ee10:xml01:dom解析和sax解析

    NULL 博文链接:https://1601844782.iteye.com/blog/2271805

    J2EE中XML配置文件的读取处理

    有好几种XML解析器:主要有DOM和SAX,在apache的XML项目组中,目前有Xerces Xalan Cocoon几个开发XML相关技术的project.Tomcat本身使用的是Sun的JAXP,而其XSL Taglib project中使用Xerces解析器。

    JSP针对XML文件操作技巧实例分析

    本文实例讲述了JSP针对XML文件操作技巧。分享给大家供大家参考,具体如下: XML(Extensible Markup Language)可扩展标记语言,这个基础知识在早些已经学习过。...首先解析XML文件一般有两种方式:DOM解析和

    XML和J2EE的组合技术

    XML的应用似乎是无穷无尽的,但它们大致上可以分为三大类:*简单数据的表示和交换(针对XML的简单API(SAX)和文档对象模型(DOM)语法解析,不同的文档类型定义(DTDs)和概要(schemas))*面向消息的计算(XML-...

    电子商务网站开发课件新课件(J2EE)

    本课件是自己上课时用的课件,主要介绍J2EE框架概述、XML,以及处理XML的DOM和SAX解析器,JDNI原理,JSP基础知识,标签的原理、编程、配制。SERVLET、EJB原理等

    DWR.xml配置文件说明书(含源码)

    DWR 自动将DOM、DOM4J、JDOM和XOM转换成DOM树,前面这几种类型都仅仅返回Document,Element,Node.DWR会自动将这些转换成浏览器DOM对象.通常在启动JDOM Converter时会有一个提示信息,除非你想采用JDOMconverter否则可以...

    基于j2ee的ajax宝典

    第4章 XML详解······ 120 4.1 XML概述················ 120 4.1.1 标记语言······ 120 4.1.2 XML的定义和发展史··· 121 4.2 XML的文档规则···· 122 4.2.1 XML文档分类·····...

    web开发常用jar

    Hibernate使用dom4j解析XML配置文件和XML映射元文件。必需的。 ehcache-1.2.jar Hibernate可以使用不同cache缓存工具作为二级缓存。EHCache是缺省的cache缓存工具。如果没有其它的可选缓存工具,则为必需的。 ...

    大数据培训课程安排.pdf

    主要技术包括:JavaScript、Jquery、注解反射⼀起使⽤,XML以及XML解析、解析dom4j、jxab、jdk8.0新特性、SVN、 Maven、easyui 4. 描述如下: 前两个阶段的基础上化静为动,可以实现让我们⽹页内容更加的丰富,当然...

    java开发常用jar包

    Hibernate使用dom4j解析XML配置文件和XML映射元文件。必需的。 ehcache-1.2.jar Hibernate可以使用不同cache缓存工具作为二级缓存。EHCache是缺省的cache缓存工具。如果没有其它的可选缓存工具,则为必需的。 ...

    超级有影响力霸气的Java面试题大全文档

    4. 多态性:  多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 5、String是最...

    java面试题

    SAX:事件驱动型的xml解析方法,适合对xml的顺序访问 jsp常用动作? 答:jsp:include 引入一个文件 jsp:useBean 实例化JavaBean jsp:setProperty 设置JavaBean属性 jsp:getProperty 输出JavaBean属性 jsp:...

    java 面试题 总结

    28、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。 public class ThreadTest1{ private int j; public static ...

    论文研究-工作流技术在ASP公共服务平台中的应用研究.pdf

    根据项目特点,建立了适合ASP...然后通过DOM解析XML数据文档和J2EE的技术支持实现了系统的轻量级工作流引擎。详细介绍了系统实现中解决的两个关键问题:事务型操作的处理和并发控制,并提出了基于优先级的锁绑定机制。

    Maven权威指南 很精典的学习教程,比ANT更好用

    11. 构建Profile 11.1. Profile是用来做什么的? 11.1.1. 什么是构建可移植性 11.1.1.1. 不可移植构建 11.1.1.2. 环境可移植性 11.1.1.3. 组织(内部)可移植性 11.1.1.4. 广泛(全局)可移植性 11.1.2. ...

    史上最好传智播客就业班.net培训教程60G 不下会后悔

    系统分为前台Web界面、后台管理界面、站内搜索、监控客户端四个子系统。 大型互联网站由于访问量非常大,因此不是那些单纯用ASP.Net控件拖拽开发的开发人员能够开发的,也不是闭门造车能够造出来的,必须是在实际...

    系统分析师考试复习资料

    ......................................................6 JSP 胜过servlet 的关键的优点:.........................................................................6 J2EE 的重要组成部分:...............

    希赛软考学院系统分析师考试辅导与培训_新技术应用资料

    2.1 XML,XSL和DOM......................................................21 2.2 三层网络架构........................................................22 3 系统设计............................................

Global site tag (gtag.js) - Google Analytics