没有合适的资源?快使用搜索试试~ 我知道了~
XML解析的几种方式,中和比较了下 更具自己的需求做选择
资源推荐
资源详情
资源评论
XML 解析的几种方式
第一种:DOM。-- 采用随机访问机制,适用于 XML 文件较小的时候
DOM 的全称是 Document Object Model,也即文档对象模型。在应用程序中,基于 DOM
的 XML 分析器将一个 XML 文档转换成一个对象模型的集合(通常称 DOM 树),应用程
序正是通过对这个对象模型的操作,来实现对 XML 文档数据的操作。通过 DOM 接口,应
用程序可以在任何时候访问 XML 文档中的任何一部分数据,因此,这种利用 DOM 接口的
机制也被称作随机访问机制。
DOM 接口提供了一种通过分层对象模型来访问 XML 文档信息的方式,这些分层对象模型
依据 XML 的文档结构形成了一棵节点树。无论 XML 文档中所描述的是什么类型的信息,
即便是制表数据、项目列表或一个文档,利用 DOM 所生成的模型都是节点树的形式。也
就是说,DOM 强制使用树模型来访问 XML 文档中的信息。由于 XML 本质上就是一种分层
结构,所以这种描述方法是相当有效的。
DOM 树所提供的随机访问方式给应用程序的开发带来了很大的灵活性,它可以任意地控制
整个 XML 文档中的内容。然而,由于 DOM 分析器把整个 XML 文档转化成 DOM 树放在了
内存中,因此,当文档比较大或者结构比较复杂时,对内存的需求就比较高。而且,对于
结构复杂的树的遍历也是一项耗时的操作。所以,DOM 分析器对机器性能的要求比较高,
实现效率不十分理想。不过,由于 DOM 分析器所采用的树结构的思想与 XML 文档的结构
相吻合,同时鉴于随机访问所带来的方便,因此,DOM 分析器还是有很广泛的使用价值的。
Java 代码
1 import java.io.File;
2
3 import javax.xml.parsers.DocumentBuilder;
4 import javax.xml.parsers.DocumentBuilderFactory;
5
6 import org.w3c.dom.Document;
7 import org.w3c.dom.Element;
8 import org.w3c.dom.NodeList;
9
10 public class DomTest1
11 {
12 public static void main(String[] args) throws Exception
13 {
14 // step 1: 获得 dom 解析器工厂(工作的作用是用于创建具体的解析器)
15 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
16
17 // System.out.println("class name: " + dbf.getClass().getName());
18
19 // step 2:获得具体的 dom 解析器
20 DocumentBuilder db = dbf.newDocumentBuilder();
21
22 // System.out.println("class name: " + db.getClass().getName());
23
24 // step3: 解析一个 xml 文档,获得 Document 对象(根结点)
25 Document document = db.parse(new File("candidate.xml"));
26
27 NodeList list = document.getElementsByTagName("PERSON");
28
29 for(int i = 0; i < list.getLength(); i++)
30 {
31 Element element = (Element)list.item(i);
32
33 String content =
element.getElementsByTagName("NAME").item(0).getFirstChild().getNodeV
alue();
34
35 System.out.println("name:" + content);
36
37 content =
element.getElementsByTagName("ADDRESS").item(0).getFirstChild().getN
odeValue();
38
39 System.out.println("address:" + content);
40
41 content =
element.getElementsByTagName("TEL").item(0).getFirstChild().getNodeVal
ue();
42
43 System.out.println("tel:" + content);
44
45 content =
element.getElementsByTagName("FAX").item(0).getFirstChild().getNodeVal
ue();
46
47 System.out.println("fax:" + content);
48
49 content =
element.getElementsByTagName("EMAIL").item(0).getFirstChild().getNode
Value();
50
51 System.out.println("email:" + content);
52
53 System.out.println("--------------------------------------");
54 }
55 }
56 }
Java 代码
57 import java.io.File;
58
59 import javax.xml.parsers.DocumentBuilder;
60 import javax.xml.parsers.DocumentBuilderFactory;
61
62 import org.w3c.dom.Attr;
63 import org.w3c.dom.Comment;
64 import org.w3c.dom.Document;
65 import org.w3c.dom.Element;
66 import org.w3c.dom.NamedNodeMap;
67 import org.w3c.dom.Node;
68 import org.w3c.dom.NodeList;
69
70 /**
71 * 使用递归解析给定的任意一个 xml 文档并且将其内容输出到命令行上
72 * @author zhanglong
73 *
74 */
75 public class DomTest3
76 {
77 public static void main(String[] args) throws Exception
78 {
79 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
80 DocumentBuilder db = dbf.newDocumentBuilder();
81
82 Document doc = db.parse(new File("student.xml"));
83 //获得根元素结点
84 Element root = doc.getDocumentElement();
85
86 parseElement(root);
87 }
88
89 private static void parseElement(Element element)
90 {
91 String tagName = element.getNodeName();
92
93 NodeList children = element.getChildNodes();
94
95 System.out.print("<" + tagName);
96
剩余13页未读,继续阅读
资源评论
u013020490
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功