JDOM创建、修改、删除、读取XML文件

42 篇文章 0 订阅

dom jar包下载地址:http://download.csdn.net/detail/male09/9803648
创建XML文档

  XML文件是一种典型的树形文件,每个文档元素都是一个document元素的子节点。而每个子元素都是一个Element对象,对象可以向下包含。

  1 因此我们可以通过先创建元素再将元素添加到父元素中,最后将顶层元素添加到根元素中。

  2 创建完文档元素后,就可以把元素添加到document对象中,然后写入文件。

  主要使用的函数:
  

Element.setAttribute 为元素添加信息

Element.addContent(String,String) 为元素添加子元素内容,也可以直接添加另一个元素节点

Document.setRootElement(Element) 为文档添加根元素

XMLOutputter.output(Document,FileWriter) 将Docuemnt写入到FileWriter文件流中

下面是主要的操作过程,写入文件的过程放到了saveXML中

@SuppressWarnings("null")
    public static void createXML() {
        // 创建document
        Document mydoc = new Document();

        // 创建元素person1
        Element person1 = new Element("person");
        person1.setAttribute("id", "ID001");
        // 添加注释
        person1.addContent(new Comment("this is person1"));

        person1.addContent(new Element("name").setText("xingoo"));
        person1.addContent(new Element("age").setText("25"));
        person1.addContent(new Element("sex").setText("M"));
        // 可以嵌套添加子元素
        Element address1 = new Element("address");
        address1.setAttribute("zone", "province");
        address1.addContent("LiaoNing");
        person1.addContent(address1);

        // 创建元素person2
        Element person2 = new Element("person");
        person2.setAttribute("id", "ID002");
        // 添加注释
        person2.addContent(new Comment("this is person2"));

        person2.addContent(new Element("name").setText("xhalo"));
        person2.addContent(new Element("age").setText("26"));
        person2.addContent(new Element("sex").setText("M"));
        // 可以嵌套添加子元素
        Element address2 = new Element("address");
        address2.setAttribute("zone", "province");
        address2.addContent("JiLin");
        person2.addContent(address2);

        // 在doc中添加元素Person
        Element info = new Element("information");
        info.addContent(person1);
        info.addContent(person2);
        mydoc.setRootElement(info);

        saveXML(mydoc);
    }

saveXML()代码:

public static void saveXML(Document doc) {
        // 将doc对象输出到文件
        try {
            // 创建xml文件输出流
            XMLOutputter xmlopt = new XMLOutputter();

            // 创建文件输出流
            FileWriter writer = new FileWriter("person.xml");

            // 指定文档格式
            Format fm = Format.getPrettyFormat();
            // fm.setEncoding("GB2312");
            xmlopt.setFormat(fm);

            // 将doc写入到指定的文件中
            xmlopt.output(doc, writer);
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

执行后,刷新项目,就可以在项目下看到person.xml文件了。
这里写图片描述

读取XML文档

  读取文档,首先需要一个xml的解析器,它可以自动的解析出各个元素,并且把子元素作为自己的孩子节点,方便操作。

  主要使用的函数:

SAXBuilder.build("xxx.xml") 解析XML文档

Document.getRootElement() 获取根元素

Element.getChildren() 获取根元素下的子元素,返回List<Element>

Element.getAttributeValue(String) 获取指定元素的信息

Element.getChildText 获取指定元素的内容
public static void readXML() {
        // 使用SAXBuilder解析器解析xml文件
        SAXBuilder sb = new SAXBuilder();
        Document doc = null;
        try {
            doc = sb.build("person.xml");
            Element root = doc.getRootElement();
            List<Element> list = root.getChildren("person");
            for (Element el : list) {
                String id = el.getAttributeValue("id");
                String name = el.getChildText("name");
                String age = el.getChildText("age");
                String sex = el.getChildText("sex");
                System.out.println("id:" + id);
                System.out.println("name:" + name);
                System.out.println("age:" + age);
                System.out.println("sex:" + sex);
                System.out.println("--------------------------");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

修改XML文档

  修改XML文档,也是先利用解析器找到指定的元素,使用setText或者setAttributeValue来修改元素内容

  修改后记得要保存到文件中,即在此调用saveXML()
  

public static void updateXML(){
        SAXBuilder sb = new SAXBuilder();
        Document doc = null;
        try {
            doc = sb.build("person.xml");
            Element root = doc.getRootElement();
            List<Element> list = root.getChildren("person");
            for (Element el : list) {
                if (el.getAttributeValue("id").equals("ID001")) {
                    Element name = el.getChild("name");
                    name.setText("xingoo---update");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        saveXML(doc);
    }

删除XML文档元素
删除操作类似修改,调用removeCotent就可以根据内容删除指定的元素了。但是要用他的父节点调用。最后也需要保存到文件中才可以。

public static void removeXML() {
        SAXBuilder sb = new SAXBuilder();
        Document doc = null;
        try {
            doc = sb.build("person.xml");
            Element root = doc.getRootElement();
            List<Element> list = root.getChildren("person");
            for (Element el : list) {
                if (el.getAttributeValue("id").equals("ID001")) {
                    root.removeContent(el);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        saveXML(doc);
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值