java基础篇---XML解析(一)
XML是可扩展标记语言
在XML文件中由于更多的是描述信息的内容,所以在得到一个xml文档后应该利用程序安装其中元素的定义名称去除对应的内容,这样的操作称为XML解析。
在XML解析中W3C定义SAX和DOM两中解析方式,这两种解析方式的程序操作如下图:
从图中可以看出,应用程序不是直接对XML文档进行操作的,而是首先由XML分析其对XML文档进项分析,然后应哟程序通过XML分析器所提供的DOM接口或SAX接口对分析结果进项操作,从而间接实现了对XML文档的访问。下面进行具体操作
DOM解析
DOM模式解析XML,是把整个XML文档当成一个对象来处理,会先把整个文档读入到内存里。是基于树的结构,通常需要加载整文档和构造DOM树,然后才能开始工作。
dom_demo.xml文件
<?xml version="1.0" encoding="GBK"?> <addresslist> <linkman> <name>żmyҮ</name> <email>oumyye@163.com</email> </linkman> <linkman> <name>oumyye</name> <email>oumyye@qq.com</email> </linkman> </addresslist>
DOMDemo.java解析文件
package com.xml.dom解析 ; import java.io.* ; import org.w3c.dom.* ; import javax.xml.parsers.* ; public class DOMDemo { public static void main(String args[]) throws Exception { // 取得DocumentBuilderFactory类的对象 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance() ; // 取得DocumentBuilder类的对象 DocumentBuilder build = factory.newDocumentBuilder() ; Document doc = build.parse(new File("E:" + File.separator + "dom_demo.xml")) ; NodeList nl = doc.getElementsByTagName("name") ; // 输出节点 System.out.println("姓名:" + nl.item(0).getFirstChild().getNodeValue()) ; } }
运行结果:
SAX解析
SAX与DOM操作不同的是,SAX采用了是一种顺序模式进行访问,是一种快速读取XML 数据的方式,当使用SAX解析器进行操作时会触发一系列事件,如下图所示,当扫描到文档开始与结束,元素开始与结束时都会调用相关的处理方法,并作出相应的操作。
sax_demo.xm文件
<?xml version="1.0" encoding="GBK"?> <addresslist> <linkman id="omy" name="裤"> <name>偶my耶</name> <email>oumyye@163.com</email> </linkman> <linkman id="ol" name="外"> <name>偶啦</name> <email>oumyye@qq.com</email> </linkman> </addresslist>
MySAX.java 源代码:
package com.xml.sax解析; import java.io.File; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.*; import org.xml.sax.helpers.*; public class MySAX extends DefaultHandler { public void startDocument() throws SAXException { System.out.println("<?xml version=\"1.0\" encoding=\"GBK\">"); } public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { System.out.print("<"); System.out.print(qName); if (attributes != null) { // 如果存在了属性 for (int x = 0; x < attributes.getLength(); x++) { System.out.print(" " + attributes.getQName(x) + "=\"" + attributes.getValue(x) + "\""); } } System.out.print(">"); } public void endElement(String uri, String localName, String qName) throws SAXException { System.out.print("<"); System.out.print(qName); System.out.print(">"); } public void characters(char[] ch, int start, int length) throws SAXException { System.out.print(new String(ch, start, length)); } public void endDocument() throws SAXException { System.out.println("文档结束。。。"); } public static void main(String args[]) throws Exception { // 建立SAX解析工厂 SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); parser.parse("e:" + File.separator + "sax_demo.xml", new MySAX()); } }
解析结果:
下面我们来看下DOM和SAX的区别:
博客地址: | http://www.cnblogs.com/oumyye/ |
博客版权: | 本文以学习、研究和分享为主,欢迎转载,转载请务必注明出处,谢谢合作。 如果文中有不妥或者错误的地方请指出。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步! |