Dom4j操作XML

dom4j帮助文档在dom4j-1.6.1/docs/guide.html文件里面,全部是英文,但是基本上应该能看懂。

 

1、  四种操作xml的方式:SAX,DOM,JDOM,DOM4J.

2、  DOM(Document Object Model):意思是把整个xml做为一个整体对象,直接全部放到内存里面,不管xml文件有多大;

3、  SAX=Sample API for XML:假如xml文件有2G,用第一种方式,是很困难的,SAX用的是一种类似流媒体方式进行的。

DOM和SAX是Java的API,处理xml文件的时候,相对来说是比较困难的,于是出现了下面两种框架,包装了上面两个框架。

4、  JDOM:

5、  DOM4J:

6、  利用DOM4J解析xml文件(读取所有的属性节点)。

Document可以理解为整个文档对象

取root节点。Document.getRootElement()返回的是一个Element(元素)

7、  理解运用xpath,path就是路径,xpath在xml文件里面找到特定的节点。

Document.selectNodes(“//hibernate-mapping/class/property”)  //其中hibenate-mapping是根节点。做变org.dom4j.Node对象返回的。

Document.selectSingleNodes(“//hibernate-mapping/class/property”)//只拿第一个。

基中@name是property的属性名valueOf是拿出name的值;

需要加入DOM4J里面的jaxen包

8、  DOM4J的生成xml文件

9、  用FileWriter生成xml文件的时候,可能没有格式,可以用XMLWriter类,这样自动进行美化。

10、  DOM4J修改xml文件;很少用。

11、  自动生成代码往往用的是:freemarker或velocity,这是常用的。用dom4j生成也很少用。

12、  怎么用表里面的结构生成xml文件。

13、 JavaDB

a)       Properties对象:可以理解为一个表格对应key,value

14、  Databasemetadata,可以能过这个JDK类,读取数据库的表结构,通过这个表结构做一些自己的事情。(熟悉用法)通过JDK文档和google学习

15、   元数据就是数据的数据,用来描述数据的数据。

16、   DWR,对Ajax框架封住得比较好,是类和java的结合。

<?xml version="1.0" encoding="UTF-8"?>
<node> 
  <book> 
    <title>JAVA编程思想</title>  
    <author>XX</author>  
    <price>12.5</price> 
  </book>  
  <book bookid="isbsb-111"> 
    <title>Effective Java</title>  
    <author>Jack</author>  
    <price>22.5</price>  
    <批发价>18</批发价> 
  </book>  
</node>

demo:

package com.itheima.dom4j.test;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.junit.Test;

import com.itheima.utils.Dom4jUtil;

/*
 * 1、得到某个具体的节点内容
2、遍历所有元素节点
3、修改某个元素节点的主体内容
4、向指定元素节点中增加子元素节点
5、向指定元素节点上增加同级元素节点
6、删除指定元素节点
7、操作XML文件属性

Element root =document.getRootElement();//得到根结点
root.nodeCount();//根结点下,子结点个数
ele.node(i);//第i个结点
authorEle.getText();取结点的文本
elements("书");所有的书结点
element("作者");得到一个作者
 */
public class Dom4jTest {

    // 1、得到某个具体的节点内容                在第二本书的作者
    @Test
    public void test1(){
        try {
            //1.得到Document对象
            Document document = Dom4jUtil.getDocument();
            //2.得到根结点
            //Element root =  document.getRootElement();
            //3.找第二本书
            //Element node = (Element)root.elements("书").get(1);
            //4再找第二本书的作者
            //Element authorEle = node.element("作者");
            
            
            //----------xpath--------------
            Node authorEle = document.selectSingleNode("//书[2]/作者");
            
            
            //5.读取文本
            System.out.println(authorEle.getText());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    
    //2、遍历所有元素节点
    @Test
    public void test2(){
        try {
            //1.得到Document对象
            Document document = Dom4jUtil.getDocument();
            //2.得到根结点
            Element root =  document.getRootElement();
            
            //3.调用
            treeWalk(root);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public void treeWalk(Element ele){
        System.out.println(ele.getName());
        for(int i=0;i<ele.nodeCount();i++){
            Node node = ele.node(i);//第i个结点
            if(node instanceof Element){
                treeWalk((Element)node);
            }
        }
    }
    
    
    //3、修改某个元素节点的主体内容   第一本书的作者改为于磊
    @Test
    public void test3(){
        try {
            //1.得到Document对象
            Document document = Dom4jUtil.getDocument();
            //2.得到根结点
            //Element root =  document.getRootElement();
            //Element bookEle = root.element("书");//找到第一本书
            
            //3.找到第一本书的作者
            //Element authorEle = bookEle.element("作者");
            //authorEle.setText("于磊");

            //----------------xpath------------------------
            Node node = document.selectSingleNode("/书架/书[1]/作者");
            node.setText("于总");
            //4.写回XML
            Dom4jUtil.writeDocument2Xml(document);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    //4、向指定元素节点中增加子元素节点  在第二本书的子结点中添加一个批发价
    @Test
    public void test4(){
        try {
            //1.得到Document对象
            Document document = Dom4jUtil.getDocument();
            //2.得到根结点
            //Element root =  document.getRootElement();
            
            //3.找到第二本书
            //Element bookEle = (Element)root.elements().get(1);
            //bookEle.addElement("批发价").setText("80");
            
            //-------------xpath---------------------------
            Element node = (Element)document.selectSingleNode("/书架/书[2]");
            node.addElement("批发价").setText("80");
        
            //4.写回XML
            Dom4jUtil.writeDocument2Xml(document);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    //5、向指定元素节点上增加同级元素节点  在第一本书的售价前面,添加一个内部价
    @Test
    public void test5(){
        try {
            //1.得到Document对象
            Document document = Dom4jUtil.getDocument();
            //2.得到根结点
            Element root =  document.getRootElement();
            
            Element bookEle = root.element("书");
            //Element priceEle = bookEle.element("售价");
            //通过DocumentHelper类提供的createElement()创建一个结点
            Element innerPriceNode = DocumentHelper.createElement("内部价");
            innerPriceNode.setText("200");
            bookEle.elements().add(2, innerPriceNode);
        
            //4.写回XML
            Dom4jUtil.writeDocument2Xml(document);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    //6、删除指定元素节点  删除第一本书的内部价结点
    @Test
    public void test6(){
        try {
            //1.得到Document对象
            Document document = Dom4jUtil.getDocument();
            //2.得到根结点
            Element root =  document.getRootElement();
            //找到第一本书
            Element bookEle = root.element("书");
            Element innerPriceEle = bookEle.element("内部价");
            bookEle.remove(innerPriceEle);//删除子结点
            
            //4.写回XML
            Dom4jUtil.writeDocument2Xml(document);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    //7、操作XML文件属性  在第二本书的书结点中,添加一个bookid属性
    @Test
    public void test7(){
        try {
            //1.得到Document对象
            Document document = Dom4jUtil.getDocument();
            //2.得到根结点
            Element root =  document.getRootElement();
            
            //3找到第二本书的书结点
            Element secondBookEle = (Element)root.elements("书").get(1);
            
            //4.设置属性
            secondBookEle.addAttribute("bookid", "isbsb-111");
            
            //取属性值
            //String sbstr = secondBookEle.attributeValue("bookid");
            //System.out.println(sbstr);
            
            //4.写回XML
            Dom4jUtil.writeDocument2Xml(document);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

转载于:https://www.cnblogs.com/xiarongjin/p/8310836.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值