DOM4J 使用简介
转:http://blog.csdn.net/icecloud/article/details/7795
?
DOM4J是dom4j.org出品的一个开源XML解析包,它的网站中这样定义:
interface java.lang.Cloneable
??? // 从文件读取XML,输入文件名,返回XML文档
??? public Document read(String fileName) throws MalformedURLException, DocumentException {
?????? SAXReader reader = new SAXReader();
?????? Document document = reader.read(new File(fileName));
?????? return document;
? public Element getRootElement(Document doc){
?????? return doc.getRootElement();
??? // 枚举所有子节点
??? for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
?????? Element element = (Element) i.next();
?????? // do something
??? }
??? // 枚举名称为foo的节点
??? for ( Iterator i = root.elementIterator(foo); i.hasNext();) {
?????? Element foo = (Element) i.next();
?????? // do something
??? }
??? // 枚举属性
??? for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {
?????? Attribute attribute = (Attribute) i.next();
?????? // do something
??? public void treeWalk() {?????? treeWalk(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....
?????????? }
?????? }
???? ? public class MyVisitor extends VisitorSupport {
?????? ??? public void visit(Element element){
?????????? ??? System.out.println(element.getName());
?????? ??? }
??? ??? ?? public void visit(Attribute attr){
?????????? ??? System.out.println(attr.getName());
?????? ??? }
??????? }???????? 调用:? root.accept(new MyVisitor())?
?? public void bar(Document document) {
?????? ?List list = document.selectNodes( //foo/bar );
?????? ?Node node = document.selectSingleNode(//foo/bar/author);
?????? ?String name = node.valueOf( @name );
??? ?}
?
??? 例如,如果你想查找XHTML文档中所有的超链接,下面的代码可以实现:
???? 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();
?????? ?}
??? ?}
?
5. 字符串与XML的转换
有时候经常要用到字符串转换为XML或反之,
Document document = ...;??? String text = document.asXML();
// 字符串转XML
??? String text = <person> <name>James</name> </person>;
6 用XSLT转换XML
??? 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;
?
??? 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);
?
? 如果你想改变输出的格式,比如美化输出或缩减格式,可以用XMLWriter类??? public void write(Document document) throws IOException {?????? // 指定文件
?????? XMLWriter writer = new XMLWriter(
??? ?????? new FileWriter( output.xml )
?????? );
?????? writer.write( document );
?????? writer.close();
?????? // 美化格式
?????? OutputFormat format = OutputFormat.createPrettyPrint();
?????? writer = new XMLWriter( System.out, format );
?????? writer.write( document );
?????? // 缩减格式
?????? format = OutputFormat.createCompactFormat();
?????? writer = new XMLWriter( System.out, format );
?????? writer.write( document );
??? }
?
如何,DOM4J够简单吧,当然,还有一些复杂的应用没有提到,如ElementHandler等。如果你动心了,那就一起来用DOM4J.
DOM4J官方网站:(我老连不上)
http://www.dom4j.org
DOM4J下载(SourceForge),最新版本为1.4
http://sourceforge.net/projects/dom4j
参考资料:
DOM4J文档
Java 中的 XML:文档模型,第一部分:性能
http://www-900.ibm.com/developerWorks/cn/xml/x-injava/index.shtml
Java 中的 XML:Java 文档模型的用法
http://www-900.ibm.com/developerWorks/cn/xml/x-injava2/index.shtml
Java XML API 漫谈 by robbin
http://www.hibernate.org.cn:8000/137.html