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