利用DOM4J开发包 进行XML解析和Xpath

DOM4J 进行XML解析

          需要的jar包:   

dom4j-1.6.1.zip中的dom4j-1.6.1.jar

jaxen-1.1-beta-6.jar    

   Xpath参考手册

          
          例子:  利用DOM4J开发包对如下的XML进行解析
            
            <?xml version="1.0" encoding="UTF-8"?>
            <书架> 
                      <书> 
                              <书名>JAVA</书名>  
                              <作者>毕向东</作者>  
                              <售价>38</售价> 
                      </书>  
                      <书> 
                              <书名>JAVAWEB</书名>  
                              <作者>马士兵</作者>  
                              <售价>60.00</售价> 
                      </书> 
            </书架>
            
            *******************************************************************************************************************
            
            解析:
            import java.io.FileOutputStream;
            import java.io.OutputStream;
            import java.util.List;
            import junit.framework.Assert;
            import org.dom4j.Document;
            import org.dom4j.DocumentHelper;
            import org.dom4j.Element;
            import org.dom4j.Node;
            import org.dom4j.io.OutputFormat;
            import org.dom4j.io.SAXReader;
            import org.dom4j.io.XMLWriter;
            import org.junit.Test;


            public class Dom4JDemo {


                    // 1. 得到某个具体的节点内容: 第2本书的作者
                    @Test
                    public void test1() throws Exception {
                                // 创建SAXReader读取器,并得到Document对象
                                SAXReader reader = new SAXReader();
                                Document document = reader.read("src/book.xml");
                                // 得到根元素
                                Element root = document.getRootElement();
                                
                                // 依次得到第2本书的作者
                                List<Element> es = root.elements("书");
                                Element e = es.get(1);
                                Element author = e.element("作者");


                                // 拿到内容并打印输出
                                //System.out.println(author.getText());
                                // 使用断言的方式来校验
                                Assert.assertEquals("马士兵", author.getText());
                    }
                    
                    // 11. Xpath方式得到某个具体的节点内容: 第2本书的作者
                    @Test
                    public void test11() throws Exception{
                      
                                SAXReader reader = new SAXReader();
                                Document document = reader.read("src/book.xml");
                                
                                String xpath = "//书[2]/作者";
                                Node author = document.selectSingleNode(xpath);
                                
                                Assert.assertEquals("马士兵", author.getText());
                    }
                    
                    
                    // 2. 遍历所有元素节点
                    @Test
                    public void test2() throws Exception {
                                // 创建SAXReader读取器,并设置Document对象
                                SAXReader reader = new SAXReader();
                                Document document = reader.read("src/book.xml");
                                // 得到根元素
                                Element root = document.getRootElement();


                                // 遍历所有的元素,打印它的名称
                                treeWalk1(root);
                    }


                    // 遍历所有元素,打印他的名称 法1:此法简单 选此法
                    public void treeWalk1(Element root) {
                                System.out.println(root.getName());
                                List<Element> es = root.elements();
                                for (Element e : es) {
                                        treeWalk1(e);
                                }
                    }


                    // 遍历所有元素,打印他的名称 法2:
                    public void treeWalk2(Element root) {
                                System.out.println(root.getName());
                                // 节点的数量
                                int count = root.nodeCount();
                                for (int i = 0; i < count; i++) {
                                        // 取索引上的节点
                                        Node node = root.node(i);
                                        // if(node.getNodeType() == Node.ELEMENT_NODE){
                                        if (node instanceof Element) {
                                                treeWalk2((Element) node);
                                              }
                                }
                    }
                    
                    
                    // 3. 修改某个元素节点的内容: 修改第2本书的售价
                    @Test
                    public void test3() throws Exception {
                                // 创建SAXReader读取器,并设置Document对象
                                SAXReader reader = new SAXReader();
                                Document document = reader.read("src/book.xml");
                                // 得到根元素
                                Element root = document.getRootElement();


                                // 得到第2本书的售价
                                Element secondBook = (Element) root.elements().get(1);
                                Element secondBookPrice = secondBook.element("售价");


                                // 设置主体内容
                                secondBookPrice.setText("60.00");


                                // 写回XML文档,分别创建目的地和格式
                                OutputStream out = new FileOutputStream("src/book.xml");
                                OutputFormat format = OutputFormat.createPrettyPrint();
                                // 指定编码: 默认编码为UTF-8
                                // format.setEncoding("UTF-8");
                                // 创建写出器:第一个参数为 目的XML文档,第二个参数是 指定的写入格式
                                XMLWriter writer = new XMLWriter(out, format);
                                // 将文档作为源写出
                                writer.write(document);
                                writer.close();
                    }
                    
                                      
                    // 4. 向指定元素节点中增加子元素节点: 给第1本书添加批发价
                    @Test
                    public void test4() throws Exception {
                                // 创建SAXReader读取器,并设置Document对象
                                SAXReader reader = new SAXReader();
                                Document document = reader.read("src/book.xml");
                                // 得到根元素
                                Element root = (Element) document.getRootElement();


                                // 找到第1本书,直接添加新元素
                                Element firstBook = root.element("书");
                                firstBook.addElement("批发价").setText("50");


                                // 写回XML文档 分别设置目的地和格式
                                OutputStream out = new FileOutputStream("src/book.xml");
                                OutputFormat format = OutputFormat.createPrettyPrint();
                                // 指定编码,默认为UTF-8编码
                                format.setEncoding("UTF-8");
                                // 创建写出器XMLWriter:第一个参数为 目的XML文档,第二个参数是 指定的写入格式
                                XMLWriter writer = new XMLWriter(out, format);
                                // 将文档作为源写出
                                writer.write(document);
                                writer.close();
                    }
                    
                    
                    // 5. 向指定元素节点上增加同级元素节点: 在第1本书的售价前面添加内部价
                    @Test
                    public void test5() throws Exception {
                                // 创建SAXReader读取器,并设置Document对象
                                SAXReader reader = new SAXReader();
                                Document document = reader.read("src/book.xml");
                                // 得到根元素
                                Element root = document.getRootElement();


                                // 找到第1本书
                                Element firstBook = root.element("书");


                                // 得到第1本书的所有子元素:List
                                List<Element> childrenlt = firstBook.elements();


                                // 借助DocumentHelper创建内部价元素,并设置其主体内容
                                Element price = DocumentHelper.createElement("内部价");
                                price.setText("10.00");


                                // 挂接到老3的位置
                                childrenlt.add(2, price);


                                // 写回XML文档,分别设置目的地和格式
                                OutputStream out = new FileOutputStream("src/book.xml");
                                OutputFormat format = OutputFormat.createPrettyPrint();
                                // 指定编码,默认为UTF-8编码
                                format.setEncoding("UTF-8");
                                // 创建写出器XMLWriter,第一个参数为 目的XML文档,第二个参数为 写出的格式
                                XMLWriter writer = new XMLWriter(out, format);
                                // 将文档作为源写出
                                writer.write(document);
                                writer.close();
                    }
                    
                    
                    // 6. 删除指定元素节点: 删除批发价
                    @Test
                    public void test6() throws Exception {
                                // 创建SAXReader读取器,并设置Document对象
                                SAXReader reader = new SAXReader();
                                Document document = reader.read("src/book.xml");
                                // 得到根元素
                                Element root = document.getRootElement();


                                // 得到第1本书
                                Element firstBook = root.element("书");


                                // 由第1本书删除批发价元素
                                Element price = firstBook.element("批发价");
                                firstBook.remove(price);


                                // 写回XML文档:分别设置目的地和格式
                                OutputStream out = new FileOutputStream("src/book.xml");
                                OutputFormat format = OutputFormat.createPrettyPrint();
                                // 指定编码,默认为UTF-8编码
                                format.setEncoding("UTF-8");
                                // 创建写出器XMLWriter: 第一个参数为 目的XML文档,第2个参数为 写出的格式
                                XMLWriter writer = new XMLWriter(out, format);
                                // 将文档作为源写出
                                writer.write(document);
                                writer.close();
                    }
                    
                    
                    // 7. 操作XML文件属性:给第1本书添加一个出版社属性
                    @Test
                    public void test7() throws Exception {
                                // 创建SAXReader读取器,并设置Document对象
                                SAXReader reader = new SAXReader();
                                Document document = reader.read("src/book.xml");
                                // 得到根元素
                                Element root = document.getRootElement();


                                // 得到第1本书
                                Element firstBook = root.element("书");


                                // 添加属性
                                firstBook.addAttribute("出版社", "传智播客");


                                // 写回XML文档: 分别设置目的地和格式
                                OutputStream out = new FileOutputStream("src/book.xml");
                                OutputFormat format = OutputFormat.createPrettyPrint();
                                // 指定编码,默认为UTF-8编码
                                format.setEncoding("UTF-8");
                                // 创建写出器XMLWriter: 第一个参数为 目的XML文档, 第2个参数为 写出格式
                                XMLWriter writer = new XMLWriter(out, format);
                                // 将文档作为源写出
                                writer.write(document);
                                writer.close();
                    }
                    


                    // 8. 获取第一本书的出版社属性
                    @Test
                    public void test8() throws Exception {
                                // 创建SAXReader读取器,并设置Document对象
                                SAXReader reader = new SAXReader();
                                Document document = reader.read("src/book.xml");


                                // 得到根元素
                                Element root = document.getRootElement();


                                // 得到第1本书,并获取其出版社属性的主体内容
                                Element firstBook = root.element("书");
                                String value = firstBook.attributeValue("出版社");


                                // 使用断言,校验出版社主体内容
                                Assert.assertEquals("传智播客", value);
                              }
              
            }
                        
                        
                        
                        
                        
                        
                        
            
            
            
            
            
            
            
            
            
            
            
            
            
            
          
          
          
          
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值