对于java,现在目前流行解析xml的技术有4种。它们分别是:dom、jdom、dom4j、sax。前3种是基于dom树解析的,后一种是基于事件处理机制的。其中最流行的为jdom与dom4j的解析方式。以下分别是jdom与dom4j方式读xml文档。有什么错误与建议希望大家给我邮件,大家共同进步。
xml文档如下:
文档名称:studentInfo.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <class>
3 <student no="1001">
4 <name>张三</name>
5 <sex>男</sex>
6 <age>20</age>
7 <score>
8 <java>90</java>
9 <net>85</net>
10 <html>87</html>
11 </score>
12 </student>
13
14 <student no="1002">
15 <name>xi</name>
16 <sex>男</sex>
17 <age>20</age>
18 <score>
19 <java>78</java>
20 <net>79</net>
21 <html>87</html>
22 </score>
23 </student>
24 </class>
一.Jdom方式读xml文档,代码如下:
使用此方式需要导入:org.jdom.jar这个包
View Code
1 import java.io.FileInputStream;
2 import java.util.List;
3 import org.jdom.Document;
4 import org.jdom.Element;
5 import org.jdom.input.SAXBuilder;
6
7 /**
8 * 解析xml
9 * 用jdom读studentInfo.xml中的数据
10 * @author dell
11 *
12 */
13 public class ReaderXML {
14
15 public static void main(String[] args) {
16
17 //1.新建一个解析器
18 SAXBuilder builder=new SAXBuilder();
19
20
21 Document doc=null;
22 try {
23 //2.获取解析的文档
24 doc=builder.build(new FileInputStream("G:\\javaWeb\\chapter01\\WebRoot\\studentInfo.xml"));
25
26 } catch (Exception e) {
27
28 e.printStackTrace();
29 }
30
31 //3.获取根节点
32 Element root=doc.getRootElement();
33
34 //4.获取子节点
35 List<Element> list=root.getChildren();
36
37 //5.循环读取数据
38 System.out.println("学号\t姓名\t性别\t年龄\tjava成绩\t.net成绩\thtml成绩");
39
40 for (Element element : list) {
41
42 List<Element> score=element.getChildren("score");//获取score节点下的子节点
43
44 for (Element s : score) {
45
46 System.out.print(element.getAttributeValue("no")+"\t"+element.getChildText("name")+"\t"+element.getChildText("sex")+"\t"+element.getChildText("age")+"\t");
47 System.out.print(s.getChildText("java")+"\t"+s.getChildText("net")+"\t"+s.getChildText("html")+"\n");
48 }
49
50 }
51
52 }
53 }
二.dom4J方式读xml文档,代码如下:
使用此方式需要导入:org.dom4j-1.6.1.jar这个包
1 import java.io.*;
2 import java.util.List;
3
4 import org.dom4j.Document;
5 import org.dom4j.Element;
6 import org.dom4j.io.SAXReader;
7
8 /**
9 * 解析xml
10 * 读取studentInfo.xml中的数据
11 * 采用dom4j方式解析
12 * dom4j是jdom一种优化式的封装
13 * @author dell
14 *
15 */
16 public class ReaderXML {
17
18 public static void main(String[] args) {
19 //1.创建解析器
20 SAXReader reader=new SAXReader();
21
22
23 Document doc=null;
24
25 try {
26 //2.得到document对象
27 doc=reader.read(new File("G:\\javaWeb\\chapter01\\WebRoot\\studentInfo.xml"));
28
29 } catch (Exception e) {
30
31 e.printStackTrace();
32 }
33 //3.得到根节点
34 Element root=doc.getRootElement();
35
36 //4.得到子节点
37 List<Element> list=root.elements();
38
39 //5.取值
40 System.out.println("学号\t姓名\t性别\t年龄\tjava成绩\t.net成绩\thtml成绩");
41
42 for (Element element : list) {
43
44 List<Element> score=element.elements("score");//得到score下的子节点
45
46 for (Element s : score) {
47
48 System.out.print(element.attributeValue("no")+"\t"+element.elementText("name")+"\t"+element.elementText("sex")+"\t"+element.elementText("age")+"\t");
49
50 System.out.print(s.elementText("java")+"\t"+s.elementText("net")+"\t"+s.elementText("html")+"\n");
51 }
52 }
53
54 }
55 }