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的区别:

java基础篇---XML解析(一)的更多相关文章
- java基础篇---XML解析(二)
XML解析之最流行的方式:DOM4J dom4j是使用java语言编写的,用于读,写,操作XML的一套组件 dom4j是一个开源的java组件,可从http://sourceforge.net/pro ...
- java基础71 XML解析中的【DOM和SAX解析工具】相关知识点(网页知识)
本文知识点(目录):本文下面的“实例及附录”全是DOM解析的相关内容 1.xml解析的含义 2.XML的解析方式 3.xml的解析工具 4.XML的解析原理 5.实例 6 ...
- java基础74 XML解析中的SAX解析相关知识点(网页知识)
1.SAX解析工具 SAX解析工具:是Sun公司提供的,内置JDK中.org.xml.sax.* 点击查看: DOM解析相关知识:以及DOM和SAX解析的原理(区别) 2.SAX解析的 ...
- java基础之XML
目录 java基础之XML 1. XML解析概述 2. DOM4J介绍 2.1 常用包 2.2 内置元素 2.2 Element类 2.3 Attribute类 2.4 常用操作 3. 代码演示 3. ...
- java基础篇---HTTP协议
java基础篇---HTTP协议 HTTP协议一直是自己的薄弱点,也没抽太多时间去看这方面的内容,今天兴致来了就在网上搜了下关于http协议,发现有园友写了一篇非常好的博文,博文地址:(http: ...
- Java基础篇(JVM)——类加载机制
这是Java基础篇(JVM)的第二篇文章,紧接着上一篇字节码详解,这篇我们来详解Java的类加载机制,也就是如何把字节码代表的类信息加载进入内存中. 我们知道,不管是根据类新建对象,还是直接使用类变量 ...
- Java基础篇(JVM)——字节码详解
这是Java基础篇(JVM)的第一篇文章,本来想先说说Java类加载机制的,后来想想,JVM的作用是加载编译器编译好的字节码,并解释成机器码,那么首先应该了解字节码,然后再谈加载字节码的类加载机制似乎 ...
- java基础篇---I/O技术
java基础篇---I/O技术 对于任何程序设计语言而言,输入输出(I/O)系统都是比较复杂的而且还是比较核心的.在java.io.包中提供了相关的API. java中流的概念划分 流的方向: 输 ...
- 金三银四跳槽季,BAT美团滴滴java面试大纲(带答案版)之一:Java基础篇
Java基础篇: 题记:本系列文章,会尽量模拟面试现场对话情景, 用口语而非书面语 ,采用问答形式来展现.另外每一个问题都附上“延伸”,这部分内容是帮助小伙伴们更深的理解一些底层细节的补充,在面试中可 ...
随机推荐
- OpenCV 学习笔记03 boundingRect、minAreaRect、minEnclosingCircle、boxPoints、int0、circle、rectangle函数的用法
函数中的代码是部分代码,详细代码在最后 1 cv2.boundingRect 作用:矩形边框(boundingRect),用于计算图像一系列点的外部矩形边界. cv2.boundingRect(arr ...
- 解决Android中多次点击(快速点击多次 )启动多个相同界面的问题
通过以下代码可以解决这个问题. /** * 防止快速点击 * @param ev * @return */ @Override public boolean dispatchTouchEvent(Mo ...
- PowerShell 获取Site Collection下被签出的文件
由于权限的设置,当文件被签出时导致别人不可见了,这对校验文件个数的人来说着实是件烦恼的事.幸好利用PowerShell,可以获取Site Collection下被签出的文件. Resolution A ...
- SharePoint 2013混合模式登陆中 使用 自定义登陆页
接前一篇博客<SharePoint 2013自定义Providers在基于表单的身份验证(Forms-Based-Authentication)中的应用>,当实现混合模式登陆后,接着我们就 ...
- 学习笔记之 curl 命令用法详解
[前言] 本文翻译和整理自 Linux-2.6.32 中和 curl 相关的 Manual Page 描述文档. 文档目的仅在提醒读者所遗忘的知识点,故在整理时削弱了阅读流畅性,适用于对 cu ...
- 全局获取 (Activity)Context,实现全局弹出 Dialog
为什么需要一个全局的 (Activity)Context 需求1:在进入 app 的时候,要求做版本检测,有新的版本的时候,弹出一个 AlertDialog,提示用户版本更新 需求2:从别的设备挤下来 ...
- android:3D垂直翻转动画-FlipAnimation
需求 对ImageView进行相似于翻纸牌的动画 解决 各种Animator的组合 第一步动画: 动画代码文件1,card_flip_left_out.xml <? xml version=&q ...
- STL学习笔记— —无序容器(Unordered Container)
简单介绍 在头文件<unordered_set>和<unordered_map> 中定义 namespace std { template <typename T, ty ...
- adaptive query processing
http://www.cs.umd.edu/~amol/talks/VLDB07-AQP-Tutorial.pdf https://www.cis.upenn.edu/~zives/research/ ...
- 每日英语:China's Bigger Innovation Problem
Last month's Third Plenum meeting of Chinese leaders seemed to signal Beijing's intention to experim ...