`
edison87915
  • 浏览: 199419 次
  • 性别: 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
分享到:
评论

相关推荐

    xml-demo.rar_DEMO_blue j_demo.xml_xml demo_做xml的demo

    在XML解析方面,有两种主要的解析方式:DOM(Document Object Model)和SAX(Simple API for XML)。DOM将整个XML文档加载到内存中形成一个树形结构,方便随机访问任何部分,但占用资源较多。SAX是事件驱动的解析器...

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

    4. **性能优化**:对于大量数据抓取,可能需要考虑其他更高效的库,如DOMDocument或Goutte。 ### 应用场景 SimpleHtmlDom广泛应用于网页爬虫、数据挖掘、网站自动化测试等领域。通过结合cURL或file_get_contents等...

    dom4j-1.6.1版本的jar

    1. **XML解析**:DOM4J支持两种主要的XML解析方式——DOM(Document Object Model)和SAX(Simple API for XML)。DOM解析将整个XML文档加载到内存中,形成一个树形结构,适合小规模或结构固定的XML文档。SAX则是一...

    dom4j jaxen-1.zip

    《XPath与XML解析:DOM4J与JAXEN深度探讨》 XML(eXtensible Markup Language)作为一种标记语言,广泛应用于数据交换、配置文件、文档结构化存储等领域。在处理XML时,XPath(XML Path Language)作为一种强大的...

    解析xml的demo4j包

    在Java编程中,处理XML文件是常见的任务,而`demo4j`通常指的是一个演示如何使用Java库解析XML的示例项目,这里的`dom4j-1.6.1`则是一个具体的XML解析库版本。 `dom4j`是一个功能强大的Java XML API,它提供了丰富...

    XMLDemo_java.rar_XMLDemo_java_java xml_sax_to write xml in java

    本示例"XMLDemo_java.rar"是基于Java实现的XML处理程序,涵盖了SAX(Simple API for XML)和DOM(Document Object Model)两种解析方式。 1. **SAX解析**: SAX是一种事件驱动的解析器,它不会一次性加载整个XML...

    xml文件的解析

    本文将详细介绍XML文件的四种解析方式,包括DOM、JDOM、DOM4J和SAX。 1. DOM(Document Object Model)解析: DOM是W3C推荐的一种解析XML的标准方法。它将XML文档视为一个树形结构,每个节点代表XML文档的一部分。...

    XmlHealperDemo_XmlHelper_DEMO_源码

    1. **XML解析**:DEMO可能使用了DOM(Document Object Model)、SAX(Simple API for XML)或XMLPullParser等解析器,它们分别有不同的优缺点。DOM将整个XML文档加载到内存中,适合小到中型的文件;SAX是事件驱动的...

    Demo4j解析XML文档实例和方法总结(经典)

    在Demo4j中,你可以找到使用Java的`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`类来解析XML的示例。例如,通过`DocumentBuilder.parse()`方法加载XML文件,然后通过`getElementsByTagName()...

    xml.rar_DEMO_java xml

    4. JDOM或DOM4J库:这些是Java中的第三方XML处理库,提供了更简洁的API,可以简化XML操作。例如,JDOM的`Element`类直接对应XML元素,可以通过方法直接添加子元素、属性等。 5. JAXB(Java Architecture for XML ...

    Dom4jDemo:字符串转xml,通过dom4j解析xml demo

    DOM4J不仅支持DOM,还引入了XPath(一种在XML文档中查找信息的语言)和SAX(Simple API for XML)解析,使得处理XML更加高效。 **安装DOM4J** 在Java项目中,你可以通过Maven或Gradle等构建工具来添加DOM4J依赖。...

    XML.rar_COM_DEMO_xml_xml 类_xml文件

    在实际应用中,处理XML文件可能涉及到错误处理、DOM(Document Object Model)和SAX(Simple API for XML)解析策略的选择,以及XPath或XSLT(XSL Transformations)等高级功能的使用,用于查询和转换XML数据。...

    XML.rar_DEMO_delphi XML_xml

    有两种解析方式:DOM(Document Object Model)和SAX(Simple API for XML)。DOM将整个文档加载到内存中,适合小型文档;SAX是事件驱动的,适用于大型文档。 6. **XPath (XML Path Language)**:一种语言,用于在...

    XMLReaderDemo_C#_xml_DEMO_

    - 解析XML文档是为了提取其中的信息,通常通过DOM(Document Object Model)、SAX(Simple API for XML)和XMLReader等方法实现。 2. **C#中的XMLReader** - XMLReader是.NET框架中用于高效、向前只读、事件驱动...

    ssdp_java_demo

    SSDP(Simple Service Discovery Protocol)是UPnP(Universal Plug and Play)框架的一部分,主要用于在网络中发现提供特定服务的设备。这个“ssdp_java_demo”是一个Java实现的SSDP设备发现的示例,可以帮助开发者...

    sax_xml_demo

    SAX(Simple API for XML)是XML解析的一种方法,与DOM(Document Object Model)解析器不同,SAX采用事件驱动的方式,以流式处理XML文档,因此它更适用于处理大型XML文件,因为它不会将整个文档加载到内存中。...

    海康国产化适配demo

    4. `demo_window_simple_playback.html` 和 `demo_window_simple_preview.html`: 这两个文件分别展示了简单的回放和预览功能,它们可能提供了基本的用户界面和交互逻辑,以便用户快速体验海康监控系统的操作。...

    jquery simpledemo1

    标题 "jquery simpledemo1" 暗示我们即将探讨的是一个基于 jQuery 的简单示例项目。jQuery 是一个广泛使用的 JavaScript 库,它简化了 HTML 文档遍历、事件处理、动画以及 Ajax 交互等任务。这个项目的目的是为初学...

    xml解析所需jar包

    然而,提供的压缩包文件列表中只有一个名为`dom4j-2.0.2.jar`的文件,这实际上是指DOM4J库,而非`demo4j`。DOM4J是一个非常流行的Java XML API,它提供了灵活且高性能的方式来处理XML文档。下面我们将详细探讨DOM4J...

Global site tag (gtag.js) - Google Analytics