dom4j解析和生成XML文件

来源:互联网 发布:mac最新远程windows 编辑:程序博客网 时间:2024/06/09 19:15

转化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);    }}
0 0
原创粉丝点击