开发者社区> shy丶gril> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

dom4j解析和生成XML文件

简介:
+关注继续查看

转化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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用 DOM4J 解析 XML
使用 DOM4J 解析 XML
0 0
【dom4j xml】使用dom4j处理XML文件--测试过程遇到的问题
首先 关于dom4j的API,有如下: 当然  其中的实体引用有以下: 测试使用环境: 使用Maven搭建web环境,pom.xml文件配置如下: 1 2 4.0.0 3 com.
913 0
dom4j解析和生成XML文件
转化XML import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.io.SAXReader; public class Foo { public Document parse(URL url) throws DocumentException {
809 0
dom4j操作xml
  dom4j是一个Java的XML API,类似于jdom,用来读写XML文件。是一个非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源工具。可以在这个地址http://dom4j.sourceforge.net进行下载。
603 0
一步一步理解XMLDOM(一)
一、XML DOM中的节点类型XML DOM与HTML DOM中的节点类型相似1、整个XML文档是一个文档节点(Document)2、每个XML标签是一个元素节点(Element)3、在XML标签中的文本是一个文本节点(Text)4、在XML标签中的每个属性是一个属性节点(Attr)5、XML文档中...
594 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载