• 使用dom4j解析xml文件


    使用dom4j解析xml文件

    2017-09-12

    目录

    获得DOM树

    添加新的节点

    更改元素属

    更改三星属性

    删除节点

    保存xml文件

    显示xml文件

    xml源文件

    <?xml version="1.0" encoding="GB2312" ?>
    <PhoneInfo>
    <Brand name="华为">
        <Type name="P9"/>
    </Brand>
    <Brand name="苹果">
        <Type name="iphone5"/>
        <Type name="iphone6"/>
    </Brand>
    </PhoneInfo>

    代码:

     

    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.Writer;
    import java.util.Iterator;
    import org.dom4j.*;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    
    public class Dom4jTest {
        Document dom = null;
    
        public static void main(String[] args) {
            Dom4jTest dom4j = new Dom4jTest();
            //获得Dom树
            dom4j.getDom();
            //添加新的节点
            dom4j.addNode();
            //更改元素属性
            dom4j.modify();
            //更改三星属性
            dom4j.modifySan();
            //删除节点
            dom4j.delete();
            //保存xml文件
            dom4j.saveXml("手机信息.xml");
            //显示xml文件
            dom4j.showInfo();
        }
    
        // 获得dom树
        public void getDom() {
            //通过reader获得Dom树
            SAXReader reader = new SAXReader();
            try {
                dom = reader.read("收藏信息.xml");
            } catch (DocumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
        // 保存xml文件
        public void saveXml(String path) {
            //设置编码格式
            //可以直接使用无参构造,效果也一样
            //OutputFormat encoding=new OutputFormat();
            OutputFormat encoding = OutputFormat.createPrettyPrint();
            encoding.setEncoding("gb2312");
            Writer writer = null;
            try {
                writer = new FileWriter(path);
                //使用XMLWriter类进行dom树的输出
                XMLWriter writerXml = new XMLWriter(writer, encoding);
                //使用Write()进行dom树的写
                writerXml.write(dom);
                //最后关闭相关流
                writerXml.close();
                writer.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
        }
    
        // 显示xml文件信息
        public void showInfo() {
            //获得dom树的根节点
            Element BrandElements = dom.getRootElement();
            //获得元素的Iterator集合
            Iterator elementIterator = BrandElements.elementIterator();
            //对Interator集合进行遍历
            while (elementIterator.hasNext()) {
                Element brandElement = (Element) elementIterator.next();
                //获得元素的属性
                String brand = brandElement.attributeValue("name");
                //继续从上一个节点获得下一节点Iterator集合
                Iterator typeElements = brandElement.elementIterator();
                while (typeElements.hasNext()) {
                    Element typeElement = (Element) typeElements.next();
                    String type = typeElement.attributeValue("name");
                    System.out.println("手机:" + brand + ",型号" + type);
                }
            }
        }
    
        // 添加节点
        public void addNode() {
            //获得根节点
            Element Root = dom.getRootElement();
            //添加Brand元素
            Element brand = Root.addElement("Brand");
            //为Brand元素添加属性
            brand.addAttribute("name", "三星");
            //继续在新加元素添加Type元素
            Element type = brand.addElement("Type");
            //为Type元素添加属性
            type.addAttribute("name", "note");
    
        }
    
        // 修改属性,添加ID属性
        public void modify() {
            Element root = dom.getRootElement();
            Iterator elementIterator = root.elementIterator();
            int i = 0;
            while (elementIterator.hasNext()) {
                Element brand = (Element) elementIterator.next();
                brand.addAttribute("id", (++i) + "");
            }
        }
    //修改三星为SAMSUNG public void modifySan() { Element rootElement = dom.getRootElement(); Iterator elementIterator = rootElement.elementIterator(); while (elementIterator.hasNext()) { Element brand = (Element) elementIterator.next(); if (brand.attributeValue("name").equals("三星")) { brand.addAttribute("name", "SAMSUNG"); } } }
    // 删除SAMSUNG元素 public void delete() { Element rootElement = dom.getRootElement(); Iterator elementIterator = rootElement.elementIterator(); while (elementIterator.hasNext()) { Element brand = (Element) elementIterator.next(); if (brand.attributeValue("name").equals("SAMSUNG")) { brand.getParent().remove(brand); } } } }
  • 相关阅读:
    C++封装SQLite实例<六>
    大哥给力点 我要发博客
    Android仿人人客户端(v5.7.1)——授权认证(用accessToken换取session_key、session_secret和userId)
    三阶魔方玩法总结
    二阶魔方玩法
    [置顶] C语言实验:等额本金还款法的计算
    活到老、学到老,我要做80岁还能写代码的奇葩!
    百度PHP电话面试之十问
    Java 面向对象编程思想类及其方法的调用,分解质因数,界面交互方法 int string 类型转换 陈光剑
    [置顶] C语言实验:输入任意一个日期的年、月、日的值,求出从公元1年1月1日到这一天总共有多少天,并求出这一天是星期几。
  • 原文地址:https://www.cnblogs.com/binglong180/p/7512142.html
Copyright © 2020-2023  润新知