dom4j解析和生成XML文件

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介:

转化XML

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;

public class Foo {

    public Document parse(URL url) throws DocumentException {
        SAXReader reader = new SAXReader();
        Document document = reader.read(url);
        return document;
    }
}

使用迭代器

document可以通过几个返回Java标准迭代器的方法实现遍历:

public void bar(Document document) throws DocumentException {

    Element root = document.getRootElement();

    // iterate through child elements of root
    for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
        Element element = (Element) i.next();
        // do something
    }

    // iterate through child elements of root with element name "foo"
    for ( Iterator i = root.elementIterator( "foo" ); i.hasNext(); ) {
        Element foo = (Element) i.next();
        // do something
    }

    // iterate through attributes of root 
    for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {
        Attribute attribute = (Attribute) i.next();
        // do something
    }
 }

快速循环

快速遍历大文件:

public void treeWalk(Document document) {
     treeWalk( document.getRootElement() );
 }

 public void treeWalk(Element element) {
     for ( int i = 0, size = element.nodeCount(); i < size; i++ ) {
         Node node = element.node(i);
         if ( node instanceof Element ) {
             treeWalk( (Element) node );
         }
         else {
             // do something....
         }
     }
 }

创建XML文档

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

public class Foo {

    public Document createDocument() {
        Document document = DocumentHelper.createDocument();
        Element root = document.addElement( "root" );

        Element author1 = root.addElement( "author" )
            .addAttribute( "name", "James" )
            .addAttribute( "location", "UK" )
            .addText( "James Strachan" );

        Element author2 = root.addElement( "author" )
            .addAttribute( "name", "Bob" )
            .addAttribute( "location", "US" )
            .addText( "Bob McWhirter" );

        return document;
    }
}

将文档写入文件

一种快速而且简单的方式如下:

FileWriter out = new FileWriter( "foo.xml" );
document.write( out );

如果想要修改输出的格式,如智能缩进输出或者紧凑输出,或者你想要使用writer对象或者OutputStream对象来完成其他任务,则可以使用XMLWriter类。

import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

public class Foo {

    public void write(Document document) throws IOException {

        // lets write to a file
        XMLWriter writer = new XMLWriter(
            new FileWriter( "output.xml" )
        );
        writer.write( document );
        writer.close();


        // Pretty print the document to System.out
        OutputFormat format = OutputFormat.createPrettyPrint();
        writer = new XMLWriter( System.out, format );
        writer.write( document );

        // Compact format to System.out
        format = OutputFormat.createCompactFormat();
        writer = new XMLWriter( System.out, format );
        writer.write( document );
    }
}

与String的转化

如果有到Document或者其他结点如AttributeElement等的引用,则可以用asXML()方法将其转化为默认的XML文本。

Document document = ...;
String text = document.asXML();

如果有String形式的XML,则可以使用DocumentHelper.parseText()将其转化为Document

String text = "<person> <name>James</name> </person>";
Document document = DocumentHelper.parseText(text);

其他操作

1 取得某结点下的某个子节点或属性

Element root = document.getRootElement();
Element elem = root.element("book");
Attribute attribute = root.attribute("id");

2 取得属性的内容

String text = attribute.getText();

3 删除某属性

Attribute attribute=root.attribute("id"); 
root.remove(attribute);

一个完整的解析和生成XML文件示例

package test;

import java.io.*;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.dom4j.Attribute;

class XMLHelper {
    /**
     * 解析XML
     * @param filename 要解析的XML的文件名
     */
    public static void resolveXML(String filename) {
        try {
            SAXReader reader = new SAXReader();
            Document document = reader.read(new File(filename));
            Element root = document.getRootElement();
            System.out.println("Root: " + root.getName());
            for (Iterator it = root.elementIterator(); it.hasNext(); ) {
                Element e = (Element)it.next();
                System.out.print(e.getName());
                //遍历属性
                for (Iterator it1 = e.attributeIterator(); it1.hasNext(); ) {
                    Attribute attribute = (Attribute)it1.next();
                    System.out.println("[" + attribute.getName() + ": " +
                        attribute.getText() + "]");
                }
                //遍历子节点
                for (Iterator it2 = e.elementIterator(); it2.hasNext(); ) {
                    Element ee = (Element)it2.next();
                    System.out.println("    " + ee.getName() + ": " + 
                        ee.getText() + " ");
                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public static Document createDocument() {
        Document document = DocumentHelper.createDocument();
        Element root = document.addElement("bookstore");
        //add book
        Element book = root.addElement("book")
            .addAttribute("category", "COOKING");
        book.addElement("title")
            .addText("Everyday Italian");
        book.addElement("author")
            .addText("Giada De Laurentiis");
        book.addElement("year")
            .addText("2005");
        book.addElement("price")
            .addText("30.00");
        //add book
        book = root.addElement("book")
            .addAttribute("category", "CHILDREN");
        book.addElement("title")
            .addText("Harry Potter");
        book.addElement("author")
            .addText("J K. Rowling");
        book.addElement("year")
            .addText("2005");
        book.addElement("price")
            .addText("29.99");

        return document;
    }

    /**
     * 生成XML文件
     * @param filename 将生成的XML输出到该文件
     */
    public static void write(String filename) {
        Document document = createDocument(); 
        try {
            //write to a file
            OutputFormat f=OutputFormat.createPrettyPrint();
            XMLWriter writer = new XMLWriter(new FileWriter(filename), f);
            writer.write(document);
            writer.close();

            //Pretty print the document to System.out
            /*OutputFormat format = OutputFormat.createPrettyPrint();
            writer = new XMLWriter(System.out, format);
            writer.write(document);*/

            //Compact print the document to System.out
            /*format = OutputFormat.createCompactFormat();
            writer = new XMLWriter(System.out, format);
            writer.write(document);*/
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

public class Main {
    public static void main(String[] args) throws Exception{
        String filename = "E:\\Eclipse Project\\WebTest\\WebContent\\myxml.xml";
        XMLHelper.resolveXML(filename);
        filename = "E:\\Eclipse Project\\WebTest\\WebContent\\myxml2.xml";
        XMLHelper.write(filename);
    }
}


转载:http://blog.csdn.net/foreverling/article/details/50152241

目录
相关文章
|
8天前
|
JavaScript 前端开发 Go
CSS 与 JS 对 DOM 解析和渲染的影响
【10月更文挑战第16天】CSS 和 JS 会在一定程度上影响 DOM 解析和渲染,了解它们之间的相互作用以及采取适当的优化措施是非常重要的。通过合理的布局和加载策略,可以提高网页的性能和用户体验,确保页面能够快速、流畅地呈现给用户。在实际开发中,要根据具体情况进行权衡和调整,以达到最佳的效果。
|
11天前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。
|
16天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
18天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
18天前
|
XML Java 数据格式
手动开发-简单的Spring基于XML配置的程序--源码解析
手动开发-简单的Spring基于XML配置的程序--源码解析
59 0
|
23天前
|
XML 前端开发 Java
讲解SSM的xml文件
本文详细介绍了SSM框架中的xml配置文件,包括springMVC.xml和applicationContext.xml,涉及组件扫描、数据源配置、事务管理、MyBatis集成以及Spring MVC的视图解析器配置。
46 1
|
3月前
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
24天前
|
XML JavaScript Java
java与XML文件的读写
java与XML文件的读写
17 3
|
5月前
|
XML Java 数据格式
java创建xml文件内容
java创建xml文件内容

推荐镜像

更多