有很多中操作XML文件的方法,这里介绍一下JDOM的使用方法和技巧。 JDOM下载地址
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的解析器,它可以自动的解析出各个元素,并且把子元素作为自己的孩子节点,方便操作。
主要使用的函数:
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文档,也是先利用解析器找到指定的元素,使用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 }
删除操作类似修改,调用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 }