• 【java开发系列】—— JDOM创建、修改、删除、读取XML文件


    有很多中操作XML文件的方法,这里介绍一下JDOM的使用方法和技巧。

    JDOM下载地址

    创建XML文档

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

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

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

      主要使用的函数:

    Element.setAttribute 为元素添加信息
    
    Element.addContent(String,String) 为元素添加子元素内容,也可以直接添加另一个元素节点
    
    Document.setRootElement(Element) 为文档添加根元素
    
    XMLOutputter.output(Document,FileWriter) 将Docuemnt写入到FileWriter文件流中

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

     1     @SuppressWarnings("null")
     2     public static void createXML() {
     3         // 创建document
     4         Document mydoc = new Document();
     5 
     6         // 创建元素person1
     7         Element person1 = new Element("person");
     8         person1.setAttribute("id", "ID001");
     9         // 添加注释
    10         person1.addContent(new Comment("this is person1"));
    11 
    12         person1.addContent(new Element("name").setText("xingoo"));
    13         person1.addContent(new Element("age").setText("25"));
    14         person1.addContent(new Element("sex").setText("M"));
    15         // 可以嵌套添加子元素
    16         Element address1 = new Element("address");
    17         address1.setAttribute("zone", "province");
    18         address1.addContent("LiaoNing");
    19         person1.addContent(address1);
    20 
    21         // 创建元素person2
    22         Element person2 = new Element("person");
    23         person2.setAttribute("id", "ID002");
    24         // 添加注释
    25         person2.addContent(new Comment("this is person2"));
    26 
    27         person2.addContent(new Element("name").setText("xhalo"));
    28         person2.addContent(new Element("age").setText("26"));
    29         person2.addContent(new Element("sex").setText("M"));
    30         // 可以嵌套添加子元素
    31         Element address2 = new Element("address");
    32         address2.setAttribute("zone", "province");
    33         address2.addContent("JiLin");
    34         person2.addContent(address2);
    35 
    36         // 在doc中添加元素Person
    37         Element info = new Element("information");
    38         info.addContent(person1);
    39         info.addContent(person2);
    40         mydoc.setRootElement(info);
    41         
    42         saveXML(mydoc);
    43     }

    saveXML()代码:

     1     public static void saveXML(Document doc) {
     2         // 将doc对象输出到文件
     3         try {
     4             // 创建xml文件输出流
     5             XMLOutputter xmlopt = new XMLOutputter();
     6 
     7             // 创建文件输出流
     8             FileWriter writer = new FileWriter("person.xml");
     9 
    10             // 指定文档格式
    11             Format fm = Format.getPrettyFormat();
    12             // fm.setEncoding("GB2312");
    13             xmlopt.setFormat(fm);
    14 
    15             // 将doc写入到指定的文件中
    16             xmlopt.output(doc, writer);
    17             writer.close();
    18         } catch (Exception e) {
    19             e.printStackTrace();
    20         }
    21     }

      执行后,刷新项目,就可以在项目下看到person.xml文件了。

    读取XML文档

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

      主要使用的函数:

    SAXBuilder.build("xxx.xml") 解析XML文档
    
    Document.getRootElement() 获取根元素
    
    Element.getChildren() 获取根元素下的子元素,返回List<Element>
    
    Element.getAttributeValue(String) 获取指定元素的信息
    
    Element.getChildText 获取指定元素的内容
     1     public static void readXML() {
     2         // 使用SAXBuilder解析器解析xml文件
     3         SAXBuilder sb = new SAXBuilder();
     4         Document doc = null;
     5         try {
     6             doc = sb.build("person.xml");
     7             Element root = doc.getRootElement();
     8             List<Element> list = root.getChildren("person");
     9             for (Element el : list) {
    10                 String id = el.getAttributeValue("id");
    11                 String name = el.getChildText("name");
    12                 String age = el.getChildText("age");
    13                 String sex = el.getChildText("sex");
    14                 System.out.println("id:" + id);
    15                 System.out.println("name:" + name);
    16                 System.out.println("age:" + age);
    17                 System.out.println("sex:" + sex);
    18                 System.out.println("--------------------------");
    19             }
    20         } catch (Exception e) {
    21             e.printStackTrace();
    22         }
    23     }

    修改XML文档

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

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

     1     public static void updateXML(){
     2         SAXBuilder sb = new SAXBuilder();
     3         Document doc = null;
     4         try {
     5             doc = sb.build("person.xml");
     6             Element root = doc.getRootElement();
     7             List<Element> list = root.getChildren("person");
     8             for (Element el : list) {
     9                 if (el.getAttributeValue("id").equals("ID001")) {
    10                     Element name = el.getChild("name");
    11                     name.setText("xingoo---update");
    12                 }
    13             }
    14         } catch (Exception e) {
    15             e.printStackTrace();
    16         }
    17         saveXML(doc);
    18     }

    删除XML文档元素

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

     1     public static void removeXML() {
     2         SAXBuilder sb = new SAXBuilder();
     3         Document doc = null;
     4         try {
     5             doc = sb.build("person.xml");
     6             Element root = doc.getRootElement();
     7             List<Element> list = root.getChildren("person");
     8             for (Element el : list) {
     9                 if (el.getAttributeValue("id").equals("ID001")) {
    10                     root.removeContent(el);
    11                 }
    12             }
    13         } catch (Exception e) {
    14             e.printStackTrace();
    15         }
    16         saveXML(doc);
    17     }
  • 相关阅读:
    java实现第七届蓝桥杯凑算式
    java实现第七届蓝桥杯凑算式
    java实现第七届蓝桥杯凑算式
    java实现第七届蓝桥杯分小组
    java实现第七届蓝桥杯分小组
    java实现第七届蓝桥杯分小组
    java实现第七届蓝桥杯分小组
    java实现第七届蓝桥杯分小组
    java实现第七届蓝桥杯骰子游戏
    “枚举类型”与“枚举变量”有什么区别?
  • 原文地址:https://www.cnblogs.com/xing901022/p/4020527.html
Copyright © 2020-2023  润新知