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

有很多中操作XML文件的方法,这里介绍一下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 voidcreateXML() {3 //创建document

4 Document mydoc = newDocument();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 voidsaveXML(Document doc) {2 //将doc对象输出到文件

3 try{4 //创建xml文件输出流

5 XMLOutputter xmlopt = newXMLOutputter();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文件了。

562c2391cc540bd88efc1d8f6f140dc7.png

读取XML文档

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

主要使用的函数:

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

Document.getRootElement() 获取根元素

Element.getChildren() 获取根元素下的子元素,返回ListElement.getAttributeValue(String) 获取指定元素的信息

Element.getChildText 获取指定元素的内容

1 public static voidreadXML() {2 //使用SAXBuilder解析器解析xml文件

3 SAXBuilder sb = newSAXBuilder();4 Document doc = null;5 try{6 doc = sb.build("person.xml");7 Element root =doc.getRootElement();8 List 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 voidupdateXML(){2 SAXBuilder sb = newSAXBuilder();3 Document doc = null;4 try{5 doc = sb.build("person.xml");6 Element root =doc.getRootElement();7 List 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 voidremoveXML() {2 SAXBuilder sb = newSAXBuilder();3 Document doc = null;4 try{5 doc = sb.build("person.xml");6 Element root =doc.getRootElement();7 List 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 }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值