dom4j_Xpath解析xml

/**
 *
 */
package org.anbo.xml.parser;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

/**
 * @author lyh
 * @author Apr 13, 2010
 */
public class Dom4jParser {
    
    private static void parseXml(String filePath){
        
        //创建解析器
         SAXReader reader = new SAXReader();
         //开始解析
         try {
            //解析整个XML文件的结果返回Document
            Document doc = reader.read(Dom4jParser.class.getClassLoader()
                        .getResourceAsStream(filePath));
            //获得根元素
            Element root = doc.getRootElement();
            //System.out.println(root.getName());
            
            //Element.elementText:取当前元素的指定的子元素的文本
            //String baen  = root.elementText("bean");
            
            //Element.element("element_name"):获得当前元素指定子元素对象
            
            //Element.elementIterator取得当前元素多个相同子元素
            Iterator iter = root.elementIterator("bean");
            while(iter.hasNext()){
                Element bean = (Element)iter.next();
                System.out.println(bean.getText());
                //取得属性值
                String id = bean.attributeValue("id");
                String ClassName = bean.attributeValue("class");
                System.out.println(id + " : " + ClassName);
                /*
                 * Map map = new HashMap();
                 * map.put(id,className);
                 */
            }
            //System.out.println(name);
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        
    }
    
    private static void parseXmlByXpath(String filePath){
        
        //创建解析器
         SAXReader reader = new SAXReader();
         //开始解析
         try {
             //
            //解析整个XML文件的结果返回Document
            Document doc = reader.read(Dom4jParser.class.getClassLoader()
                        .getResourceAsStream(filePath));
            
            //Document.selectNodes:以XPath的方式选择所有符合要求的节点
            List beanList = doc.selectNodes("//bean");
            
            /*指定元素路径元素
             *List beanList = doc.selectNodes("beans/bean");
             */
            
            /*所有指定元素属性.....
             * List authorList = doc.selectNodes("//author/@id");
             */
            for(int i = 0; i < beanList.size(); i++){
                Element e = (Element)beanList.get(i);
                System.out.println(e.elementText("name"));
            }
            
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        
    }
    
    private static void modifyXml(String filePath){
        
        //创建解析器
         SAXReader reader = new SAXReader();
         //开始解析
         try {
            //解析整个XML文件的结果返回Document
             Document doc = reader.read(Dom4jParser.class.getClassLoader()
                        .getResourceAsStream(filePath));
            //Document.selectNodes:以XPath的方式选择所有符合要求的节点
            List beanList = doc.selectNodes("//bean");
            for(int i = 0; i < beanList.size(); i++){
                Element e = (Element)beanList.get(i);
                e.addAttribute("age", String.valueOf(i));
                
            }
            OutputFormat format = OutputFormat.createPrettyPrint();
            //format.setEncoding("GBK");   //支持中文输出
            XMLWriter writer = new XMLWriter(new FileWriter(new File("new.xml")),format);
            writer.write(doc);
            writer.close();
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
    
    public static void main(String[] args){
        
        //parseXml("xmlparser.xml");
        //parseXmlByXpath("xmlparser.xml");
        modifyXml("xmlparser.xml");
    }
    
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值