dom4j(二)

   有时用来生成一个xml格式的文件,或者把一个字符串转成xml格式的,或者便利一个节点下的对象,记住,便利一个节点下的对象,仅是这个节点下的对象,而没有孙节点,下面是从网找的一些基本操作;

  

XMLExtensible Markup Language)即可扩展标记语言,这个东东的详细情况可以参见百度百科,我主要说下它的两大作用1.存储数据;2.跨平台的数据传输(也就是应用于不 同的平台之上,有桥梁的作用,我是这么理解的,呵呵)ok,现在说说对xml文件的解析,java本事对xml有一套规范和解析方式,但是不是很好用, 目前比较常用的其他解析类库有jdomdom4j,相比之下据说dom4j相对强大一点,那我们就用dom4j吧。

首先需要说明的是这个技术的学习方略是按照官方的文档进行。并没有参见其他的文章,虽然文档时英文的,虽然我的英语很菜,但还是能看懂的。相当于官 方说明的翻译工作吧。

1.下载dom4j的压缩包,个人比较喜欢去官方找。英文的网站找google大神就搞定了。

2.eclipse下新建java工程,放入dom4j要用到的jar包,这里要用到两个dom4j-1.6.1.jarjaxen-1.1- beta-6.jar个,后者是在用到xpath的时候用,负责会报错!

3.打开下载的安装包下的docs目录下index.html文件,一大堆英文出来了,点左侧的那个quick start快速开始,翻译工作开始:

Parsing XML解析xml文件,第一种是官方文档上的,二三是我自己加的:

Java代码

1.    /** 

2.         *  XML文件,这里有多重读取方式,这里是URL 

3.         * @param url 

4.         * @return 

5.         * @throws DocumentException 

6.         */  

7.        public Document parse(URL url) throws DocumentException{  

8.            SAXReader reader = new SAXReader();  

9.            return reader.read(url);  

10.     }  

11.     /** 

12.      *  用用路径构造文件的方法 

13.      * @param path 

14.      * @return 

15.      * @throws DocumentException 

16.      */  

17.     public Document parse(String path) throws DocumentException{  

18.         SAXReader reader = new SAXReader();  

19.         return reader.read(new File(path));  

20.     }  

21.     /** 

22.      *  文件流对象构造xml文档 

23.      * @param in 

24.      * @return 

25.      * @throws DocumentException 

26.      */  

27.     public Document parse(InputStream in) throws DocumentException{  

28.         SAXReader reader = new SAXReader();  

29.         return reader.read(in);  

30.     }  

 

  Using Iterators用迭代打方式解析xml文件的内容

Java代码

1.    /** 

2.         *  xml文件 

3.         * @param document 

4.         */  

5.        public void iteratorFind(Document document){  

6.            Element root = document.getRootElement();  

7.            //从根节点遍历  

8.            for(Iterator i = root.elementIterator();i.hasNext();){  

9.                Element element = (Element) i.next();  

10.             System.out.println(element.attributeValue("name"));  

11.             System.out.println(element.getText());  

12.         }  

13.           

14.         //从某一节点开始遍历  

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

16.             Element element = (Element) i.next();  

17.             //做一些事情  

18.         }  

19.         //遍历属性  

20.         for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {  

21.             Attribute attribute = (Attribute) i.next();  

22.             // do something  

23.         }  

24.   

25.     }  

  Powerful Navigation with XPath强大的xpath导航

Java代码

1.    /** 

2.         * X- path的查找方式 

3.         * @param document 

4.         */  

5.        public void xpathFind(Document document){  

6.            List<Element> list = document.selectNodes("/root/author");  

7.            for(int i=0;i<list.size();i++){  

8.                Element element = list.get(i);  

9.                String name = element.attributeValue("name");  

10.             System.out.println(name);  

11.         }  

12.         System.out.println(list.size());  

13.         Node node = document.selectSingleNode("/root/author");  

14.         //采用@+属性名的方式获得属内容  

15.         String name = node.valueOf("@name");  

16.         String text = node.getText();  

17.         System.out.println(name + text);  

18.     }  

  Fast Looping 快速循环,实际上和iterator差不多

Java代码

1.    public void treeWalk(Document document) {  

2.           treeWalk( document.getRootElement() );  

3.       }  

4.      

5.       public void treeWalk(Element element) {  

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

7.               Node node = element.node(i);  

8.               if ( node instanceof Element ) {  

9.                   treeWalk( (Element) node );  

10.            }  

11.            else {  

12.                // do something....  

13.            }  

14.        }  

15.    }  

 

 Creating a new XML document 创建一个新的xml文档,建议按我的教程先执行这步操作,后面的解析内容都是应用这部分demo产生的xml文件进行的。

Java代码

1.    /** 

2.         *   建一个XML文件 

3.         * @return 

4.         */  

5.        public Document createDocument(){  

6.            Document document = DocumentHelper.createDocument();  

7.            Element root = document.addElement("root");  

8.            Element author1 = root.addElement("author")  

9.            .addAttribute("name", "James")  

10.         .addAttribute("location", "UK")  

11.         .addText( "James Strachan" );  

12.            

13.         Element author2 = root.addElement( "author" )  

14.          .addAttribute( "name", "Bob" )  

15.          .addAttribute( "location", "US" )  

16.          .addText( "Bob McWhirter" );  

17.   

18.      return document;  

19.   

20.     }  

 Write xml document to file xml文件写入到文件系统,即存储到磁盘,但是这个写的文件格式不是很好看

 

Java代码

1.    /** 

2.         *  xml文档到磁盘文件 

3.         * @param document 

4.         * @throws IOException 

5.         */  

6.        public void writeFile(Document document) throws IOException{  

7.            XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));  

8.            writer.write(document);  

9.            writer.close();  

10.     }  

 

  这里提供一种比较好看的输出方式

 

Java代码

1.    /** 

2.         *  式话写xml文件 

3.         * @param document 

4.         * @throws IOException 

5.         */  

6.        public void prettyWrite(Document document) throws IOException{  

7.            OutputFormat format = OutputFormat.createPrettyPrint();  

8.            XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);  

9.            writer.write(document);  

10.         writer.close();  

11.     }  

 Converting to and from Strings 将字符串转换成xml文件

 

Java代码

1.    /** 

2.         *  文本的xml文件转换成xml文档 

3.         * @return 

4.         * @throws DocumentException 

5.         */  

6.        public Document convertFromStr() throws DocumentException{  

7.            String xmlStr = "<books><book author='李连杰'>1基金</book>& lt;book author='周星驰'>演员的自我修养</book></books>";  

8.            Document document = DocumentHelper.parseText(xmlStr);  

9.            return document;  

10.     }  

 

  也可以将xml文档转换成string

 

Java代码

1.    /** 

2.         *  xml文档转换成String 

3.         * @return 

4.         * @throws DocumentException 

5.         */  

6.        public String covertFromXML() throws DocumentException{  

7.            Document document = convertFromStr();  

8.            return document.asXML();  

  最后写下dom4jvisitor的支持,先写一visitor类,继承自VisitorSupport

 

Java代码

1.    public class MyVisitor extends VisitorSupport {  

2.      

3.        @Override  

4.        public void visit(Attribute attribute) {  

5.            System.out.println("-----"+attribute.getValue());  

6.        }  

7.      

8.        @Override  

9.        public void visit(Element element) {  

10.         System.out.println("------"+element.getText());  

11.     }  

12.       

13. }  

 

 调用的时的方法,直接使用文档或者节点.appept(new 自己写的visitor);

 

Java代码

1.    public void testVisitor() throws DocumentException{  

2.            Document document = xml.convertFromStr();  

3.            //document.accept(new MyVisitor());  

4.            document.selectSingleNode("/books/book").accept(new MyVisitor());  

5.        }  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值