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 ... using System; using System.Web; using Excel = Microsoft.Office.Interop.Excel; namespace Comm { /// & ... 下面是今天写的几道题: 292. Nim Game You are playing the following Nim Game with your friend: There is a heap o ... 在win2010系统上使用sql2008进行附加数据库(包括在x86系统正在使用的数据库文件,直接拷贝附加在X64系统中)时,提示无法打开文件,5120错误. 这个错误是因为没有操作权限,所以附加的时 ... redis主从复制需要注意的一个问题 这两天我朋友在使用redis偶尔会遇见一个问题,就是所有的缓存莫名其妙会不见,找了好久都没找到,他一直以为 有人错误执行了什么命令 他跟我说的时候我估计是主从复制 ... SCSS语法: 假设变量申明带有!default,那么如果在此申明之前没有这个变量的申明,则用这个值,反之如果之前有申明,则用申明的值. ‘...’传递多个参数: @mixin box-shadow( ... function Touying(g) f=rgb2gray(g); % [m n]=size(f); [row col]=size(f); % T=graythresh(f) % T=T*255 % ... 先考虑化简f函数 发现,f函数可以写成一个递归式,化简后可以先递推求出所有f函数的值, 所以可以先求出所有S函数的值,对于询问,O(1)回答 代码: //File Name: hdu5382.cpp ... * 1.statelessComponent 不包含任何state的组件 例如:AntDesign的 :Button,Input组件 * 2.viewComponent 包含少量ui state的组件 ... 一.EL简介 1.语法结构 ${expression}2.[]与.运算符 EL 提供.和[]两种运算符来存取数据. 当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字 ... 参考网摘: http://www.360doc.com/content/13/0305/10/15643_269388816.shtml
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解析的更多相关文章
随机推荐