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

Dom4j笔记总结《入门总结》

阅读更多
Parsing XML

    或许你想要做的第一件事情就是解析一个某种类型的XML文档,用dom4j很容易做到。请看下面的示范代码:

import java.net.URL;

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;
    }
}
使用迭代器(Iterators)
    我们可以通过多种方法来操作XML文档,这些方法返回java里标准的迭代器(Iterators)。例如:

public void bar(Document document) throws DocumentException {
        Element root = document.getRootElement();
        //迭代根元素下面的所有子元素
        for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
            Element element = (Element) i.next();
            //处理代码
        }

        //迭代根元素下面名称为"foo"的子元素
        for ( Iterator i = root.elementIterator( "foo" ); i.hasNext(); ) {
            Element foo = (Element) i.next();
            //处理代码
        }

        // 迭代根元素的属性attributes)元素
        for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {
            Attribute attribute = (Attribute) i.next();
            // do something
        }
     }
强大的XPath导航
    在dom4j中XPath可以表示出在XML树状结构中的Document或者任意的节点(Node)(例如:Attribute,Element 或者ProcessingInstruction等)。它可以使在文档中复杂的操作仅通过一行代码就可以完成。例如:

public void bar(Document document) {
        List list = document.selectNodes( "//foo/bar" );
        Node node = document.selectSingleNode( "//foo/bar/author" );
        String name = node.valueOf( "@name" );
    }

    如果你想得到一个XHTML文档中的所有超文本链接(hypertext links)你可以使用下面的代码:

    public void findLinks(Document document) throws DocumentException {

        List list = document.selectNodes( "//a/@href" );

        for (Iterator iter = list.iterator(); iter.hasNext(); ) {
            Attribute attribute = (Attribute) iter.next();
            String url = attribute.getValue();
        }
    }
    如果你需要关于XPath语言的任何帮助,我们强烈推荐这个站点Zvon tutorial他会通过一个一个的例子引导你学习。
快速遍历(Fast Looping)
如果你不得不遍历一个非常大的XML文档,然后才去执行,我们建议你使用快速遍历方法(fast looping method),它可以避免为每一个循环的节点创建一个迭代器对象,如下所示:

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文档对象
    在dom4j中你可能常常希望用程序生成一个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;
    }
}
将一个文档对象写入文件中
    将一个文档对象写入Writer对象的一个简单快速的途径是通过write()方法。

        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 {

        // 写入文件
        XMLWriter writer = new XMLWriter(
            new FileWriter( "output.xml" )
        );
        writer.write( document );
        writer.close();


        // 以一种优雅的格式写入System.out对象
        OutputFormat format = OutputFormat.createPrettyPrint();
        writer = new XMLWriter( System.out, format );
        writer.write( document );

        // 以一种紧凑的格式写入System.out对象
        format = OutputFormat.createCompactFormat();
        writer = new XMLWriter( System.out, format );
        writer.write( document );
    }
}
转化为字符串,或者从字符串转化
    如果你有一个文档(Document)对象或者任何一个节点(Node)对象的引用(reference),象属性(Attribute)或者元素(Element),你可以通过asXML()方法把它转化为一个默认的XML字符串:

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

如果你有一些XML内容的字符串表示,你可以通过DocumentHelper.parseText()方法将它重新转化为文档(Document)对象:

        String text = "<person> <name>James</name> </person>";
        Document document = DocumentHelper.parseText(text);
通过XSLT样式化文档(Document)
    使用Sun公司提供的JAXP API将XSLT 应用到文档(Document)上是很简单的。它允许你使用任何的XSLT引擎(例如:Xalan或SAXON等)来开发。下面是一个使用JAXP创建一个转化器(transformer),然后将它应用到文档(Document)上的例子:

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;

import org.dom4j.Document;
import org.dom4j.io.DocumentResult;
import org.dom4j.io.DocumentSource;

public class Foo {

    public Document styleDocument(
        Document document, 
        String stylesheet
    ) throws Exception {

        // 使用 JAXP 加载转化器
        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer transformer = factory.newTransformer( 
            new StreamSource( stylesheet ) 
        );

        // 现在来样式化一个文档(Document)
        DocumentSource source = new DocumentSource( document );
        DocumentResult result = new DocumentResult();
        transformer.transform( source, result );

        // 返回经过样式化的文档(Document)
        Document transformedDoc = result.getDocument();
        return transformedDoc;
    }
}

 

分享到:
评论
2 楼 xiejin2008 2009-03-16  
是嘛.去搜搜去 XStream。我曾今用Ajax的时候,用servlet或jsp生成过xml文件.返回给页面.ajax的回调方法中进行处理.
1 楼 leeldy 2009-03-13  
要从Pojo生成XML,或者又XML生成对象的话,你可以搜索一下XStream这个东西。。。

相关推荐

    Hibernate入门笔记

    - `lib\required`目录下的所有JAR包,如`dom4j`, `cglib`, `slf4j-api`, `slf4j-simple`等。 **1.2 Hibernate简介** - **定义:** Hibernate是一种对象关系映射(Object Relational Mapping, ORM)框架,用于将...

    javascript入门笔记

    2、文档对象模型(Document Object Model) - DOM 允许让 JS 与 HTML 文档打交道 3、浏览器对象模型(Browser Object Model) - BOM 允许让 JS 与 浏览器进行交互 JS是一款基于对象的编程语言 2、JS的基础语法 1...

    方立勋30天轻松掌握JavaWeb视频笔记

    - **DOM4J**:重点介绍DOM4J库的使用方法,提高XML文档的处理效率。 - **XML Schema**:探讨XML Schema的基本概念及约束规则的定义方法。 ##### 12. HTTP协议 - **HTTP协议简介**:从概念入手,讲解HTTP协议的基本...

    hibernate笔记

    9. **配置Hibernate**:使用Hibernate前,需要准备JDBC驱动(如MySQL的JDBC驱动),并确保所有必要的库文件(如Hibernate核心库、CGLIB、DOM4J等)都在类路径中。对于Web应用,这些库应放在WEB-INF/lib目录下。此外...

    传智播客 方立勋 javaweb 完全笔记

    **7.38 Tip:Dom4j 在指定位置插入节点** - **方法**: - 在指定元素前插入 - 在指定元素后插入 **7.39 Tip:字符串与 XML 的转换** - **操作**: - 将 XML 字符串转换为 Document 对象 - 将 Document 对象转换为...

    java私塾全部笔记

    ### Java私塾全部笔记知识点概览 #### 一、JAVA基础 ##### 第一章 Java入门 - **Java是什么** - Java是一种广泛使用的面向对象的编程语言。 - Java不仅是一门语言,还是一种软件开发平台,支持跨平台运行。 - ...

    Spring框架笔记

    - **DOM4J解析XML**:Spring使用DOM4J解析XML配置文件。 - **工厂设计模式**:Spring内部使用工厂模式来创建对象。 - **反射**:通过反射机制创建对象和注入依赖。 ### 入门案例 1. **导入Jar包**:首先需要...

    XML资料大全--基础 语言 笔记课件

    - 开源库:如Java的JAXB、DOM4J,Python的lxml,JavaScript的xml2js等,用于XML的处理。 通过本资料大全,你可以系统地学习XML的基础知识,逐步掌握如何创建、解析和利用XML进行数据管理。随着对XML理解的深入,你...

Global site tag (gtag.js) - Google Analytics