博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 使用 Dom4j 解析 XML 指南
阅读量:6576 次
发布时间:2019-06-24

本文共 6914 字,大约阅读时间需要 23 分钟。

太阳火神的美丽人生 ()

本文遵循“”创作公用协议

解析 XML
Parsing XML

首先要做的事情之一就是,可能要解析某种类型的一个 XML 文档。dom4j 中很容易做到这一点。下面的代码演示了如何去做。

One of the first things you'll probably want to do is to parse an XML document of some kind. This is easy to do in dom4j. The following code demonstrates how to this.

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;    }}

使用迭代器
Using Iterators

一个 XML 文档可以使用各种方法返回标准的 Java 迭代器进行导航。例如:

A document can be navigated using a variety of methods that return standard Java Iterators. For example

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        }     }

强大的 XPath 导航
Powerful Navigation with XPath

dom4j 中 XPath 表达式可以应用于文档或任何该树中的节点(诸如属性、元素或处理指示符)。这将允许使用一行代码在整个文档中实施复杂的导航。例如:

In dom4j XPath expressions can be evaluated on the Document or on any Node in the tree (such as Attribute, Element or ProcessingInstruction). This allows complex navigation throughout the document with a single line of code. For example.

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

例如,你想要找到在一个 XHTML 文档中找到所有的超文本链接,下面的代码会被用到:

For example if you wish to find all the hypertext links in an XHTML document the following code would do the trick.

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 语言的帮助,我们强烈建议 ,它允许你通过示例来学习。
If you need any help learning the XPath language we highly recommend the which allows you to learn by example.

快速循环
Fast Looping

If you ever have to walk a large XML document tree then for performance we recommend you use the fast looping method which avoids the cost of creating an Iterator object for each loop. For example

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....            }        }    }

Creating a new XML document

Often in dom4j you will need to create a new document from scratch. Here's an example of doing that.

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;    }}

Writing a document to a file

A quick and easy way to write a Document (or any Node) to a Writer is via the write() method.

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

If you want to be able to change the format of the output, such as pretty printing or a compact format, or you want to be able to work with Writer objects or OutputStream objects as the destination, then you can use the XMLWriter class.

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 );    }}

Converting to and from Strings

If you have a reference to a Document or any other Node such as an Attribute or Element, you can turn it into the default XML text via the asXML() method.

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

If you have some XML as a String you can parse it back into a Document again using the helper method DocumentHelper.parseText()

String text = "
James
"; Document document = DocumentHelper.parseText(text);

Styling a Document with XSLT

Applying XSLT on a Document is quite straightforward using the API from Sun. This allows you to work against any XSLT engine such as Xalan or SAXON. Here is an example of using JAXP to create a transformer and then applying it to a 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 {        // load the transformer using JAXP        TransformerFactory factory = TransformerFactory.newInstance();        Transformer transformer = factory.newTransformer(             new StreamSource( stylesheet )         );        // now lets style the given document        DocumentSource source = new DocumentSource( document );        DocumentResult result = new DocumentResult();        transformer.transform( source, result );        // return the transformed document        Document transformedDoc = result.getDocument();        return transformedDoc;    }}

转载地址:http://ipwno.baihongyu.com/

你可能感兴趣的文章
在mysql表中插入大量测试数据
查看>>
怎么给电脑设置IP地址和DNS地址,各系统设置IP/DNS几种方法
查看>>
面试总结之 oop desing 之 The Strategy Pattern
查看>>
必 备 习 题 集 (一)
查看>>
windows下批量部署简易脚本
查看>>
python爬虫入门—统计豆瓣电影评论词频
查看>>
【LoadRunner技术讲座4】利用sitescope监测监控mysql
查看>>
转:模态对话框的支持 (IE,Firefox,Chrome)
查看>>
Jenkins+QTP自动化测试框架
查看>>
《Node.js In Action》笔记之流程控制
查看>>
3518EV200 SDK学习1
查看>>
1163: 零起点学算法70——Yes,I can!
查看>>
2018-2019-2 网络对抗技术 20165318 Exp1 PC平台逆向破解
查看>>
关于图片或者文件在数据库的存储方式归纳
查看>>
hihocoder 1014 Trie树
查看>>
ADO.NET笔记——使用DataSet返回数据
查看>>
MOTO XT702添加开机音乐
查看>>
Python脚本日志系统
查看>>
B0BO TFS 安装指南(转载)
查看>>
gulp常用命令
查看>>