XML.03-DOM和SAX解析
body, td { 解析xml常用的有两种方式,DMO和SAX DOM和SAX的区别: xml的DOM解析,主要会用到两个包中的类 在拿到document之后,就可以想干哈就干哈了. 在元素末尾增加一个子元素 这个地方需要注意,Node和Element. Node表示文档树上的一个节点,这个文档不局限于HTML或者XML,而element表示HTML或者xml中一个元素. 在任意位置增加元素 删除一个节点 这里比较蛋疼的是,必须先找到要删除的元素,然后再找他爹,然后通过他爹的remove方法把它删掉… 改 查找 Node下面有很多get方法,需要的时候再翻文档吧. SAX方式和DOM方式的套路差不多. 只有一点不一样,SAX方式没有增删改的功能,只是单纯的读取解析,所以就没有回写的必要了. 那么这里就涉及到两个东西: 解析器: 解析器采用SAX方式在解析某个XML文档时,它只要解析到XML文档的一个组成部分,都会去调用事件处理器的一个方法,解析器在调用事件处理器的方法时,会把当前解析到的xml文件内容作为方法的参数传递给事件处理器。 事件处理器: 写一个自己的Handler 发散一下,既然是个方法那就可以自己定义行为了. 比如读取特定标签 解析主类: 一.介绍 dom是w3c指定的一套规范标准,核心是按树形结构处理数据,dom解析器读入xml文件并在内存中建立一个结构一模一样的“树”,这树各节点和xml各标记对应,通过操纵此“树”来处理xml中的文 ... [文档整理系列] Java SE之XML<二>XML DOM与SAX解析 XML编程:CRUD(Create Read Update Delete) XML解析的两种常见方式: DOM(D ... 本文知识点(目录):本文下面的“实例及附录”全是DOM解析的相关内容 1.xml解析的含义 2.XML的解析方式 3.xml的解析工具 4.XML的解析原理 5.实例 6 ... schema文件 <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="htt ... 1.常用XML的解析方式:DOM和SAX 1)DOM思想:将整个XML加载内存中,形成文档对象,所以对XML操作都对内存中文档对象进行. 2)SAX思想:一边解析,一边处理,一边释放内存资源---不允 ... DOM 解析器将整个 XML 文档加载到内存来创建一棵 DOM 模型树,这样可以 更快的查找节点和修改 XML 结构,而 SAX 解析器是一个基于事件的解析器, 不会将整个 XML 文档加载到内存.由 ... 使用JAXP 对 XML文档进行 SAX解析: public class Demo1 { /** * 使用JAXP对XML文档进行SAX解析 * @throws Exception * @throws ... 本篇随笔将详细讲解如何在Android当中解析服务器端传过来的XML数据,这里将会介绍解析xml数据格式的三种方式,分别是DOM.SAX以及PULL. 一.DOM解析XML 我们首先来看看DOM(Do ... 引言 NOKIA 有句著名的广告语:"科技以人为本".不论什么技术都是为了满足人的生产生活须要而产生的.详细到小小的一个手机.里面蕴含的技术也是浩如烟海.是几千年来人类科技的结晶, ... 一:JAXP使用SAX方式解析XML文件 1:dom解析与sax解析异同点 2:sax解析特点 二:代码案例 1:xml文件 <?xml version="1.0" enco ... http://blog.csdn.net/allen_zhao_2012/article/details/8056665 回调函数透彻理解Java 标签: classjavastringinterfa ... 1.数据类型 javascript中的基本数据类型有4中,undefined,number,string,boolean 1.1 typeof关键字 typeof关键字可以获取一个变量的的类型.先举个 ... 安装 安装Nginx Nginx是最流行的高性能HTTP服务器. 安装pcre: wget https://sourceforge.net/projects/pcre/files/pcre/8.37/ ... 在进行web程序开发,如果项目组没有使用自动化发布工具(jenkins + maven + svn + tomcat ),我们一般会使用maven的热部署来完成发布,在部署的过程中我们开发,测试,生产 ... 1.if.py #coding=utf-8 user = 'alex' passwd = 'alex3714' username = input('username:') password = inp ... 最近学到spring ,出来了一个新概念,面向切面编程,下面做个笔记,引自百度百科. Aspect Oriented Programming(AOP),面向切面编程,是一个比较热门的话题.AOP主要实 ... Color the ball 我真的该认真的复习一下以前没懂的知识了,今天看了一下线段树,以前只会用模板,现在看懂了之后,发现还有这么多巧妙的地方,好厉害啊 所以就应该尽量搞懂 弄明白每个知识点 [题 ... 一.数据库的SQL USE [Text]GO/****** Object: StoredProcedure [dbo].[mon] Script Date: 2017-01-03 15:59:28 * ... C++11 的 lambda 表达式规范如下: [ capture ] ( params ) mutable exception attribute -> ret { body } (1) [ ... Shopping Time Limit: 1000MS Memory limit: 65536K 题目描述 Saya and Kudo go shopping together.You can ass ...
font-family: calibri;
font-size: 10pt;
}

XML的DOM解析
解析
public static Document getDocument(String src) throws Exception{
//获取工厂类
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//获取解析器
DocumentBuilder builder = factory.newDocumentBuilder();
//返回Document(org.w3c.dom.Document)
return builder.parse(src);
}处理
/**
* DOM大法之--在元素末尾增加一个元素
* @throws Exception
*/
public static void addElementTest() throws Exception{
//解析
Document document = JaxpDomUtils.getDocument("src/book.xml");
//处理
NodeList nodeList = document.getElementsByTagName("书");
Node book2 = nodeList.item(1);
Element cat = document.createElement("cat");
cat.setTextContent("I am a cat");
book2.appendChild(cat);
//回写
JaxpDomUtils.writeBack(document, "src/book.xml");
} /**
* DOM大法之--在任意位置增加元素
* @throws Exception
*/
public static void addElementAnyWhereTest() throws Exception{
Document document = JaxpDomUtils.getDocument("src/book.xml");
Node book2 = document.getElementsByTagName("书").item(1);
Node author2 = document.getElementsByTagName("作者").item(1);
Element cat = document.createElement("cat");
cat.setTextContent("I am a cat too");
book2.insertBefore(cat, author2);
JaxpDomUtils.writeBack(document, "src/book.xml");
} /**
* DOM大法之--删除一个元素
* @throws Exception
*/
public static void deleteNodeTest() throws Exception{
Document document = JaxpDomUtils.getDocument("src/book.xml");
Node cat1 = document.getElementsByTagName("cat").item(0);
Node book = cat1.getParentNode();
book.removeChild(cat1);
JaxpDomUtils.writeBack(document, "src/book.xml");
} /**
* DOM大法之--修改元素
* @throws Exception
*/
public static void changeNodeTest() throws Exception {
Document document = JaxpDomUtils.getDocument("src/book.xml");
Node author2 = document.getElementsByTagName("作者").item(1);
author2.setTextContent("西川结衣");
JaxpDomUtils.writeBack(document, "src/book.xml");
} /**
* DOM大法之--删除一个元素
* @throws Exception
*/
public static void deleteNodeTest() throws Exception{
Document document = JaxpDomUtils.getDocument("src/book.xml");
Node cat1 = document.getElementsByTagName("cat").item(0);
Node book = cat1.getParentNode();
book.removeChild(cat1);
JaxpDomUtils.writeBack(document, "src/book.xml");
}回写
public static void writeBack(Document document, String dest) throws Exception{
//回写的工厂类
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult(dest));
}XML的SAX解析
SAX和DOM方式的不同:
SAX解析原理
这玩意儿主要的方法,大概是这个样子的: void parse(String uri, DefaultHandler dh)
事件处理器由程序员编写,程序员通过事件处理器中方法的参数,就可以很轻松地得到sax解析器解析到的数据,从而可以决定如何对数据进行处理
对于一个标准的XML它的消息触发机制大概是这个样子的.
SAX解析范例
/**
* 解析xml文件
* @author thecatcher
*
*/
class MyHandler1 extends DefaultHandler{
//开始标签
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
System.out.println("read a start label for an element:"+qName);
}
//元素内容
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
String str = new String(ch,start,length);
System.out.println(str);
}
//结束标签
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.println("read a end label for an element:"+qName);
}
}/**
* 读取特定标签
* @author thecatcher
*
*/
class MyHandler21 extends DefaultHandler{
private boolean flag=false;
private int count =0;
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if("作者".equals(qName)){
flag=true;
count++;
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if(flag&&count==2){
String str=new String(ch, start, length);
System.out.println(str);
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
flag=false;
}
} public void readXMLTest() throws ParserConfigurationException, SAXException, IOException{
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
parser.parse("src/book2.xml", new MyHandler21());
}XML.03-DOM和SAX解析的更多相关文章
随机推荐