`
edison87915
  • 浏览: 196934 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

DOM4J_SIMPLE_DEMO

    博客分类:
  • XML
 
阅读更多

简单小记:DEMO见附件

 

package test;

import java.io.FileWriter;
import java.net.URL;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.XPath;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class DOM4JTest {
    
    public static void main(String[] args) throws Exception{
        
        DOM4JTest test = new DOM4JTest();
        
        //step 1
        Document doc = test.parseDocument(new URL("file:applicationContext.xml"));
        //step 2-1
//        test.usingIterator1(doc);
        //step 2-2
//        test.usingIterator2(doc);
        //step 2-3
//        test.usingIterator3(doc);
        //step 2-4
//        test.elements(doc);
        //step 3-1
//        test.xpath1(doc);
        //step 3-2
//        test.xpath2(doc);
        //step 4
//        test.treeWalker(doc.getRootElement());
        //step 5 
//        Document d = test.create();
//        test.treeWalker(d.getRootElement());
        //step 6-1
//        test.output1(test.create());
        //step 6-2
//        test.output2(test.create());
        //step 6-3
//        test.output3(test.create());
        //step 7-1
//        test.convert1(doc);
        //step 7-2
//        test.convert2();
        //step 8
        test.insert(doc);
    }
    
    //解析document----new SAXReader().read(URL)
    public Document parseDocument(URL url) throws Exception{
        //SAX=Simple Api for XML
        SAXReader reader = new SAXReader();
        Document document = reader.read(url);
        return document;
    }
    //遍历子元素iterator------element.elementIterator
    public void usingIterator1(Document document){
        Element root = document.getRootElement();
        System.out.println(root.getName());
        Iterator iterator = root.elementIterator();
        while(iterator.hasNext()){
            Element element = (Element)iterator.next();
            //相对于根[/]的path===>return /beans/bean
            System.out.println(element.getPath());
            //相对于参数Element元素的path
            System.out.println(element.getPath(root.getParent()));
            System.out.println(element.getName());
            System.out.println("#################################");
        }
    }
    //根据name-标签名遍历子元素---element.elementIterator(name)
    public void usingIterator2(Document document){
        Element root = document.getRootElement();
        //遍历name=param的所有子元素
        Iterator iterator = root.elementIterator("test2");
        while(iterator.hasNext()){
            Element element = (Element)iterator.next();
            System.out.println(element.getName());
            System.out.println("#################################");
        }
    }
    //遍历元素的属性---element.attributeIterator(name)
    public void usingIterator3(Document document){
        Element root = document.getRootElement();
        //遍历name=param的所有子元素
        Iterator iterator = root.elements().get(0).attributeIterator();
        while(iterator.hasNext()){
            Attribute attribute = (Attribute)iterator.next();
            System.out.println(attribute.getName());
            System.out.println(attribute.getData());
            System.out.println(attribute.getPath());
            System.out.println(attribute.getText());
            System.out.println("#################################");
        }
    }
    //列表LIST遍历
    public void elements(Document document){
        
//        List elements = document.getRootElement().elements("bean");
        List elements = document.getRootElement().elements();
        for(Object obj : elements){
            System.out.println(((Element)obj).getName());
        }
    }
    //xpath的支持需要xpath库-jaxen.jar
    //XPATH----List list = document.selectNodes(//path)
    public void xpath1(Document document){
        //xpath接口用法-
//        XPath xpathSelector = DocumentHelper.createXPath("//beans/test1");
//        List list = xpathSelector.selectNodes(document);
        List list = document.selectNodes("//beans/test1");
        for(Object obj : list){
            Element element = (Element)obj;
            System.out.println(element.getName());
        }
        System.out.println("#####################################################");
        //xpath-属性选择
        list = document.selectNodes("//beans/test1[@id!='userService1']");
        for(Object obj : list){
            Element element = (Element)obj;
            System.out.println(element.valueOf("@id"));
        }
        System.out.println("#####################################################");
        //xpath-序号选择####序号从1开始
        list = document.selectNodes("//beans/test1[@id!='userService1'][2]");
        for(Object obj : list){
            Element element = (Element)obj;
            System.out.println(element.valueOf("@id"));
        }
    }
    //XPATH----selectSingleNode|node.valueOf("@attributeName")
    public void xpath2(Document document){
        Node node = document.selectSingleNode("//beans");
        System.out.println(node.getName());
        System.out.println("#####################################################");
        //selectSingleNode仅选择一个Node,若有多个并列的Node,则选择第一个
        node = document.selectSingleNode("//beans/bean");
        System.out.println(node.valueOf("@class"));
    }
    //递归遍历
    public void treeWalker(Element element){
        for(int i = 0;i < element.nodeCount();i++){
            Node node = element.node(i);
            System.out.println(node.getPath());
            if(node instanceof Element){
                treeWalker((Element)node);
            }
        }
    }
    //创建XML
    public Document create(){
        
        //或DocumentHelper.createDocument(空)==>建立无根document,再add
        Element root = DocumentHelper.createElement("xmlRoot")
                        .addAttribute("hehe", "ai");
        Document document = DocumentHelper.createDocument(root);
        //链式!!!
        Element author1 = root.addElement("author")
                            .addAttribute("name", "haimingwei")
                            .addAttribute("age", "dead")
                            .addAttribute("gender", "male")
                            .addText("author1_text");
        Element author2 = root.addElement("author")
        .addAttribute("name", "seven")
        .addAttribute("age", "100")
        .addAttribute("gender", "male")
        .addText("author2_text");
        
        return document;
    }
    //output
    public void output1(Document document) throws Exception{
        FileWriter fw = new FileWriter("dom4j_text.xml");
        document.write(fw);
        //不close竟然输出文件中没有内容
        fw.close();
    }
    //output-format
    public void output2(Document document) throws Exception{
        //compact紧凑格式
        //OutputFormat format = OutputFormat.createCompactFormat();
        //漂亮格式
        OutputFormat format = OutputFormat.createPrettyPrint();
        XMLWriter writer = new XMLWriter(new FileWriter("dom4j_text.xml"),format);
        writer.write(document);
        writer.close();
    }
    //output-输出到console
    public void output3(Document document) throws Exception{
        //compact紧凑格式
        //OutputFormat format = OutputFormat.createCompactFormat();
        //漂亮格式
        OutputFormat format = OutputFormat.createPrettyPrint();
        //OutputFormat可设置编码
        format.setEncoding("utf-8");
        XMLWriter writer = new XMLWriter(System.out,format);
        writer.write(document);
        writer.close();
    }
    //Document===>String
    public void convert1(Document document){
        String xmlStr = document.asXML();
        System.out.println(xmlStr);
    }
    //String===>Document[DocumentHelper.parseText]
    public void convert2() throws Exception{
        String xmlStr = "<bean id=\"dataSource\" class=\"org.springframework.jdbc.datasource.DriverManagerDataSource\">" +
                        "<property name=\"driverClassName\" value=\"com.mysql.jdbc.Driver\"/>" +
                        "<property name=\"url\" value=\"jdbc:mysql://localhost:3306/frame\"/>" +
                        "<property name=\"username\" value=\"root\"/><property name=\"password\" value=\"\"/></bean>";
        Document doc = DocumentHelper.parseText(xmlStr);
        this.output3(doc);
    }
    //insert-复制[dom4j中clone为深克隆]一个元素并插入
    public void insert(Document document) throws Exception{
        
        Element element = document.getRootElement().elements().get(0);
        Element newElement = (Element)element.clone();
        
        //????content()
        List childList = element.getParent().elements();
        childList.add(element.getParent().indexOf(element),newElement);
        //重新写回XML文件  - -!
        XMLWriter writer = new XMLWriter(new FileWriter("applicationContext.xml"),new OutputFormat().createPrettyPrint());
        writer.write(document);
        writer.close();
    }
}

 

1
2
分享到:
评论

相关推荐

    SimpleHtmlDom:php使用simple_html_dom抓取网页数据的一个Demo

    SimpleHtmlDomphp使用simple_html_dom抓取网页数据的一个Demo

    Android_XML_Demo:Android解析XML格式数据的三种方法

    Android_XML_Demo Android解析XML格式数据的三种方法 XML在各种开发中都广泛应用,Android也不例外。作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能。今天就由我向大家介绍一下在Android...

    demo:平常练习的demo :backhand_index_pointing_down:

    simple-dom-library 我将一些原生的DOM操作封装了一层。可以更加简单的使用domAPI操作页面。 只是一个练习用的demo,对于dom的理解还不是很深,轮子造的肯定可以优化,但是还是想要造轮子 思路 在window对象上挂一个...

    kbase-ui-plugin-demo-simple-dom-widget

    标题标题 这是插件的示例自述文件。 请使用此空间来平整它。

    dock-spawn-ts:TypeScript HTML对接框架(Dock-spawn的叉子)

    用法示例在page / demo / demo_simple_es5.html中 与原始Dockspawn的差异 打字稿 错误修正/性能优化 保存/恢复固定和对话框的保存/恢复 触摸支持(适用于ipad / iphone和android设备) 性能修复(减少不必要的删除...

    ImageGalleryDemo:A simple demo of image gallery(图片展示 demo)

    #introdution一个显示图片库的简单演示。 参考“ DOM脚本”。 只是记录优化过程。 #释放 v0.01-20151031:Init演示 #contact如有任何疑问,请参阅问题。

    Android三种解析XML方式demo

    在Android平台上可以使用Simple?API?for XML(SAX) 、 Document Object Model(DOM)和Android附带的pull解析器解析XML文件

    Visual C++ 编程资源大全(英文源码 控件)

    ComboCompletion_demo.zip A combobox that autocompletes as you type(17KB)&lt;END&gt;&lt;br&gt;71,IDComboDemo.zip An extremely simple but useful CComboBox entension(12KB)&lt;END&gt;&lt;br&gt;72,MRUCombo.zip A combobox...

    大名鼎鼎SWFUpload- Flash+JS 上传

     param_object:一个simple JavaScript object,所有的name/value都必须是字符串,例如(this.setPostParams({ "Mari": name });)。  - 返回  void [编辑本段]SWFUpload中的事件  SWFUpload在运行过程中提供了...

    SpaceSeekers:瞬态观察 - 手机上有关活动中子星和黑洞的每日新闻

    我们使用 PHP Simple Html DOM Parser 进行网页抓取过程,以及 rss_feed 库的修改版本。 Kong数据连接器使用 PHP 编码,但使用 Wordpress 核心作为数据库管理框架。 事件检测基于 100% 上升的通量变化概率。 ...

    271个java需要用的jar包

    dom4j-1.6.1.jar druid-1.0.12.jar dwr-1.1.1.jar ezmorph-1.0.6.jar fastjson-1.1.15.jar freemarker-2.3.19.jar freemarker-2.3.22.jar geronimo-javamail_1.4_spec-1.7.1.jar geronimo-jta_1.1_spec-1.1.1.jar ...

    jquery美化表单

    The idea is simple: since normal input fields (including radio buttons, checkboxes, textareas, etc) can only be styled to a small degree, they have to be hidden and their visual appearance replaced ...

    simple-base:一个非常简单的JS

    ##功能概述仿照jQuery的...[removed]$(function() {// 简单选择器$('#demo')$('#demo .test')$('#demo span')$(.test)$('p')// 复杂选择器$('#demo').find('.test')$('#demo').find('.test').eq(1)$('#demo').find('.

    world-conquer:World世界控制

    前端框架: React,React-dom 前端Ajax通信: axios 前端Web RWD设计: Material-ui,React-Simple-Map 后端: Node.js,Express.js 数据库: Mongoose,MongoDB 捆绑包: Webpack,Babel 演示版 网站 GIF ...

    d3-gauge:建立在 d3 之上的仪表可视化

    安装 npm install d3-gauge尝试一下npm explore d3-gaugenpm run demo应用程序接口####gauge (el[, opts])* 创建一个附加到给定 DOM 元素的仪表。 @name 仪表 @function参数: el DOMElement仪表附加到opts 具有以下...

    前端-后端java的Util类的工具类

    │ │ Dom4jHelper.java │ │ Escape.java │ │ ExecHelper.java │ │ FileHelper.java │ │ FileUploadUtil.java │ │ FileUtil.java │ │ ftp二进制与ascii传输方式区别.txt │ │ IPDeal.java │ │ Md5....

    Sortable前端框架

    Demo: http://jsbin.com/hunifu/4/edit?css,js,output ```css .ghost { opacity: 0.4; } ``` ```js Sortable.create(list, { ghostClass: "ghost" }); ``` --- #### `chosenClass` option Class name for ...

    python3.6.5参考手册 chm

    turtledemo Multi-threading Optimizations Unicode Codecs Documentation IDLE Code Repository Build and C API Changes Porting to Python 3.2 What’s New In Python 3.1 PEP 372: Ordered ...

    VB编程资源大全(英文源码 网络)

    So 下载 the code and get involved with the News Group, help us to help you.&lt;END&gt;&lt;br&gt;4 , urllink.zip User control to launch web browser and jump to URL.&lt;END&gt;&lt;br&gt;5 , vbftp.zip Sample application ...

Global site tag (gtag.js) - Google Analytics