Xml 解析:(sax 解析)
sax解析的原理()
解析xml有兩種技術 dom 和sax
根據xml的層級結構在內存中分配一個樹形結構
把xml中標簽,屬性,文本封裝成對象
sax方式:事件驅動,邊讀邊解析
在javax.xml.parsers包里面
1 SAXParser (SAXParser 是抽象類,所以不能new )
此類的實例可以從 SAXParserFactory.newSAXParser() 方法獲得
- parse(File f, DefaultHandler dh) 兩個參數
第一個參數:xml的路徑
事件處理器
2 SAXParserFactory
實例 newInstance() 方法得到
畫圖分析一下sax執行過程
當解析到開始標簽時候,自動執行startElement方法
當解析到文本時候,自動執行characters方法
當解析到結束標簽時候,自動執行endElement方法
4、使用jaxp的sax方式解析xml(會寫)
sax方式不能實現增刪改操作,只能做查詢操作
打印出整個文檔
執行parse方法,第一個參數xml路徑,第二個參數是 事件處理器
創建一個類,繼承事件處理器的類,
重寫里面的三個方法
獲取到所有的name元素的值
定義一個成員變量 flag= false
判斷開始方法是否是name元素,如果是name元素,把flag值設置成true
如果flag值是true,在characters方法里面打印內容
當執行到結束方法時候,把flag值設置成false
獲取第一個name元素的值
定義一個成員變量 idx=1
在結束方法時候,idx+1 idx++
想要打印出第一個name元素的值,
- 在characters方法里面判斷,
-- 判斷flag=true 并且 idx==1,在打印內容
package cn.itcast.jaxpsax;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class TestSax {
public static void main(String[] args) throws Exception {
/*
* 1、創建解析器工廠
* 2、創建解析器
* 3、執行parse方法
*
* 4、自己創建一個類,繼承DefaultHandler
* 5、重寫類里面的三個方法
* */
//創建解析器工廠
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
//創建解析器
SAXParser saxParser = saxParserFactory.newSAXParser();
//執行parse方法
saxParser.parse("src/p1.xml", new MyDefault2());
}
}
//實現獲取所有的name元素的值
class MyDefault2 extends DefaultHandler {
boolean flag = false;
int idx = 1;
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
//判斷qName是否是name元素
if("name".equals(qName)) {
flag = true;
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
//當flag值是true時候,表示解析到name元素
//索引是1
if(flag == true && idx == 2) {
System.out.println(new String(ch,start,length));
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
//把flag設置成false,表示name元素結束
if("name".equals(qName)) {
flag = false;
idx++;
}
}
}
class MyDefault1 extends DefaultHandler {
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
System.out.print("<"+qName+">");
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
System.out.print(new String(ch,start,length));
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.print("</"+qName+">");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<person>
<p1 id1="aaaa">
<name>zhangsan</name>
<age>300</age>
<sex>nv</sex>
</p1>
<p1>
<name>lisi</name>
<age>30</age>
</p1>
</person>
智能推薦
sax 解析xml
本文是參考別人的寫的, 地址忘了,拿人手短,提前聲明一下。 解析步驟: 1.創建一個SAXParserFactory對象 SAXParserFactory factory=SAXParserFactory.newInstance(); 2.獲得解析器 SAXParser parser=factory.newSAXParser(); 3.調用解析方法解析xml,這里的第一個參數可以傳遞文件、流、字符...
SAX解析XML
什么是XML? XML 指可擴展標記語言(eXtensible Markup Language)。 你可以通過本站學習XML教程 XML 被設計用來傳輸和存儲數據。 XML是一套定義語義標記的規則,這些標記將文檔分成許多部件并對這些部件加以標識。 它也是元標記語言,即定義了用于定義其他與特定領域有關的、語義的、結構化的標記語言的句法語言。 python對XML的解析 常見的XML編程接口有DOM和...
XML解析(二):SAX解析
概述 SAX(Simple API for XML)是java官方提供的另一種解析XML的方式。與DOM解析方式不同,SAX是采用事件驅動的方式解析文檔,解析前不需要讀入整個文檔,而讀文檔的過程就是解析的過程。事件驅動,就是一種基于回調(callback)機制的運行方法。 優點:采用事件驅動模式,對內存耗費較小,適用于只需要處...
猜你喜歡
XML解析(一),SAX解析XML
轉載自 XML解析(一),SAX解析XML 一、概述 SAX,全稱Simple API for XML,是一種以事件驅動的XMl API,是XML解析的一種新的替代方法,解析XML常用的還有DOM解析,PULL解析(Android特有),SAX與DOM不同的是它邊掃描邊解析,自頂向下依次解析,由于邊掃描邊解析,所以它解析XML具有速度快,占用內存少的優點,對于An...
android使用sax解析xml
隨著技術的發展,現在的web已經和以前不同了。web已經逐漸像移動的方向傾斜,作為程序員的確應該拓展一下自己的知識層面。學習各方面的知識,今天就接著前幾天的弄一下android的xml解析,這次就使用sax的方式解析xml.下面就一步一步的來做吧。 1.編寫一個簡單的xml 2.編寫pojo類 3.寫一個解析xml的類 4.進行單元測試 最后來看一下運行效果圖,這里最好弄個filter,控制臺就沒...
對XML進行Sax解析
對XML進行Sax解析: 一、對XML進行Sax解析: Sax解析XML是事件驅動的,安裝XML的順序一步一步進行解析的.優點不用事先調入整個文檔,占用資源少,缺點是事件過后,若沒保存數據,那么數據就丟了;無狀態性;從事件中只能得到文本,但不知該文本屬于哪個元素. 二、實現: 1.創建一個XMl文檔: &n...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...