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 ... 对于你的需求,Symfony2通过DIC提供了kernel服务,以及request(请求)的封装. 在controller里(在其他地方你可以自行注入kernel,这个服务是HttpKernel库里的 ... PHP+Mysql是一个最经常使用的黄金搭档,它们俩配合使用,能够发挥出最佳性能,当然,如果配合Apache使用,就更加Perfect了. 因此,需要做好对mysql的查询优化.下面通过一个简单的例子 ... 1. http://newweb.top/ 2. http://newweb.top/Templates/agency-gh-pages/index.html 通过Hibernate反向工程生成个DAO: package dao; import java.util.List; import org.hibernate.LockMode; import org ... <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ... 彻底搞定char/wchar_t!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (2013-07-17 10:18:28) 转载▼ 从char/wchar_t到TCHAR(1) ... IOPS (Input/Output Operations Per Second),即每秒进行读写(I/O)操作的次数,多用于数据库等场合,衡量随机访问的性能.存储端的IOPS性能和主机端的IO是不同 ... 正则表达式 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大.正则表达式是一个特殊的 ... How Windows Generates 8.3 File Names from Long File Names Windows generates short file names from lo ... 1.进入yum配置文件目录:cd /etc/yum.repos.d/ 2.备份配置文件:mv CentOS-Base.repo CentOS-Base.repo.bak 3.下载网易的配置,改成网易的 ...
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解析的更多相关文章
随机推荐