JDOM实现XML文件的遍历
2015-12-14 22:57
204 查看
前言:DOM和SAX是跨语言的XML的解析准备,在Java 中使用却没有那么方便。Java 拥有自己的JDOM 和DOM4J(DOM for Java),这两个是专门为Java语言提供的解析工具,使用起来很方便,本文首先来介绍一下运用JDOM下的DOM和SAX分别来实现对XML文件元素的遍历。
1、使用DOM方式。
(1)首先我们有一个XML文件,存储student 元素:
依然使用上边的XML文件。
所以,SAX的优点是:解析的XML文件没有大小限制,解析速度快;缺点是:因为解析是一行一行的处理的,数据解析之后就丢失了,元素与元素之间的结构关系没有保留下来,不适合对XML进行增删改查。
1、使用DOM方式。
(1)首先我们有一个XML文件,存储student 元素:
<span style="font-size:14px;"> <?xml version="1.0" encoding="utf-8"?> <students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.itcast.cn/xml" <!-- 默认命名空间 --> xsi:schemaLocation="http://www.itcast.cn/xml students.xsd"> <student number="ITCAST_1001"> <name>zhangSan</name> <age>23</age> <sex>male</sex> </student> </students> </span>(2)实现遍历:
<span style="font-size:14px;"> public class Demo { @Test public void method() throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//创建解析器工厂 DocumentBuilder builder = factory.newDocumentBuilder(); //通过工厂得到解析器 Document doc = builder.parse(new File("src/students.xml"));//通过解析器解析XML文件,得到Document对象 // 遍历Document Element root = doc.getDocumentElement(); //得到根元素 NodeList stuNodeList = root.getElementsByTagName("student"); //得到子元素集合 //循环遍历stuNodeList,获取每个student元素 for(int i = 0; i < stuNodeList.getLength(); i++) { Node node = stuNodeList.item(i); //按角标依次得到集合中的子元素 Element stuEle = (Element) node;//因为stuNodeList中都是学生元素,所以可以强制转换 // 获取stuEle元素的名称number属性的值。 String number = stuEle.getAttribute("number"); // 获取stuEle的所有名为name的子元素,返回值为NodeList,再调用子元素的getTextContent()来获取元素的文本内容 String name = stuEle.getElementsByTagName("name").item(0).getTextContent(); String age = stuEle.getElementsByTagName("age").item(0).getTextContent(); String sex = stuEle.getElementsByTagName("sex").item(0).getTextContent(); System.out.println(number + ", " + name + ", " + age + ", " + sex); } } } </span>2、使用SAX方式。
依然使用上边的XML文件。
<span style="font-size:14px;"> public class Demo { @Test public void method() throws Exception { SAXParserFactory factory = SAXParserFactory.newInstance(); //创建解析器工厂 SAXParser parser = factory.newSAXParser(); //创建解析器 // 解析方法需要两个参数,一个是xml文件,一个是处理器对象 parser.parse(new File("src/students.xml"), new MyHandler()); } } // 自定义SAX处理器,相应方法在解析过程中被调用 class MyHandler extends DefaultHandler { @Override public void startDocument() throws SAXException { //重写DefaultHandler方法,当开始解析文档时调用此方法 System.out.println("开始解析XML文件"); } @Override public void endDocument() throws SAXException { //当文档解析结束后调用此方法 System.out.println("XML解析结束"); } @Override public void startElement(String uri, String localName, String qName, //开始解析元素时调用此方法 Attributes attributes) throws SAXException { System.out.println("开始解析元素:" + qName); } @Override public void endElement(String uri, String localName, String qName)//解析元素结束时调用本方法 throws SAXException { System.out.println("结束解析元素:" + qName); } public void characters(char[] ch, int start, int length) throws SAXException { //当解析字符时调用此方法 String str = new String(ch, start, length); str.trim(); if(!str.isEmpty()) { System.out.println(str); } } } </span>小结:DOM解析方式是将XML文档作为一个对象整体保存在内存中,有解析结果,之后从内存中对文档进行操作,因为是整体保存,所以可能会因为文件过大导致内存溢出;SAX解析没有解析结果,在解析XML的过程中处理数据,解析完一条立即释放资源去解析下一条。
所以,SAX的优点是:解析的XML文件没有大小限制,解析速度快;缺点是:因为解析是一行一行的处理的,数据解析之后就丢失了,元素与元素之间的结构关系没有保留下来,不适合对XML进行增删改查。
相关文章推荐
- RTL2832U+R820电视棒跟踪飞机轨迹教程(ADS-B)
- 1.18 组件映射(一个表对应两个类)
- lnmp 记录
- IOS远程推送基础
- Activity跳转 如A —> B生命周期
- FreeStor究竟能够有多Free
- 读书笔记《高效程序员的45个习惯敏捷开发修炼之道》
- SqlConnection,OleDbConnection,OdbcConnection和OracleConnection
- 【待解决】使用JUnit时报错java.lang
- 【Servlet 】工作原理解析2
- 罗懋康教授: 学数学, 要通“心法”
- 编译 PHP时提示mysql 错误
- 1.Benchmark SQL 数据库测试工具使用——安装使用
- K均值聚类(Kmeans)
- 第二次练习
- 【生活中的小事儿】
- Ajax工作原理(转)
- VIM中括号的自动补全与删除
- 【Android】编程检查服务是否可用, service available programmally
- 百度地图开发全解析