Dom4j官网解释实例

Dom4j是一个易于使用的,开源的库,在Java平台上与XML,XPath,XSLT协同工作。使用Java集合框架,全面支持DOM,SAX,JAXP。

官方网站:http://dom4j.org

1.将XML文件转换为一个Document对象

importjava.net.URL;

importorg.dom4j.Document;

importorg.dom4j.DocumentException;

importorg.dom4j.io.SAXReader;

publicclassFoo{

publicDocumentparse(URLurl)throwsDocumentException{

SAXReaderreader=newSAXReader();

Documentdocument=reader.read(url);

returndocument;

}

}

2.很多方法用于操作Document,可以返回标准的Java迭代器

publicvoidbar(Documentdocument)throwsDocumentException{

Elementroot=document.getRootElement();

//iteratethroughchildelementsofroot

for(Iteratori=root.elementIterator();i.hasNext();){

Elementelement=(Element)i.next();

//dosomething

}

//iteratethroughchildelementsofrootwithelementname"foo"

for(Iteratori=root.elementIterator("foo");i.hasNext();){

Elementfoo=(Element)i.next();

//dosomething

}

//iteratethroughattributesofroot

for(Iteratori=root.attributeIterator();i.hasNext();){

Attributeattribute=(Attribute)i.next();

//dosomething

}

}

3.快速循环

如果你需要遍历一个很大的XML文档,可以使用快速循环(递归)来改善性能。可以避免为每一次循环都创建一个迭代器对象。

publicvoidtreeWalk(Documentdocument){

treeWalk(document.getRootElement());

}

publicvoidtreeWalk(Elementelement){

for(inti=0,size=element.nodeCount();i<size;i++){

Nodenode=element.node(i);

if(nodeinstanceofElement){

treeWalk((Element)node);

}

else{

//dosomething....

}

}

}

4.创建一个新的XML文档

importorg.dom4j.Document;

importorg.dom4j.DocumentHelper;

importorg.dom4j.Element;

publicclassFoo{

publicDocumentcreateDocument(){

Documentdocument=DocumentHelper.createDocument();

Elementroot=document.addElement("root");

Elementauthor1=root.addElement("author")

.addAttribute("name","James")

.addAttribute("location","UK")

.addText("JamesStrachan");

Elementauthor2=root.addElement("author")

.addAttribute("name","Bob")

.addAttribute("location","US")

.addText("BobMcWhirter");

returndocument;

}

}

5.将XML文档写入文件

通过write()方法将一个XML文档写入文件是最简单的方式。

FileWriterout=newFileWriter("foo.xml");

document.write(out);

如果你想改变输出的格式,比如美观的格式(含缩进)和压缩的格式(不含缩进),可以使用XMLWriter类。

importorg.dom4j.Document;

importorg.dom4j.io.OutputFormat;

importorg.dom4j.io.XMLWriter;

publicclassFoo{

publicvoidwrite(Documentdocument)throwsIOException{

//letswritetoafile

XMLWriterwriter=newXMLWriter(

newFileWriter("output.xml")

);

writer.write(document);

writer.close();

//PrettyprintthedocumenttoSystem.out

OutputFormatformat=OutputFormat.createPrettyPrint();

writer=newXMLWriter(System.out,format);

writer.write(document);

//CompactformattoSystem.out

format=OutputFormat.createCompactFormat();

writer=newXMLWriter(System.out,format);

writer.write(document);

}

}

6.XML和String之间的相互转换

通过asXML()方法,你可以将一个Document,Attribute或Element对象转换成一个包含XML文本的字符串。

Documentdocument=...;

Stringtext=document.asXML();

同样,通过DocumentHelper.parseText()方法,你也可以方便地将一个字符串形式的XML转换成一个Document对象。

Stringtext="<person><name>James</name></person>";

Documentdocument=DocumentHelper.parseText(text);