sax解析例子演示
例項1:使用sax解析讀取xml檔案,完整輸出文件內容
主程式入口:
public static void main(String[] args)throws Exception {
//1.建立SAXParser
SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
//2.讀取xml檔案
MyDefaultHandler2 handler = new MyDefaultHandler2();
parser.parse(new File("./src/contact.xml"), handler);
String content = handler.getContent();
System.out.println(content);
}
自定義類重寫DefaultHandler方法
public class MyDefaultHandler2 extends DefaultHandler {
//儲存xml文件資訊
private StringBuffer sb = new StringBuffer();
//獲取xml資訊
public String getContent(){
return sb.toString();
}
/**
* 開始標籤
*/
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
sb.append("<"+qName);
//判斷是否有屬性
if(attributes!=null){
for(int i=0;i<attributes.getLength();i++){
//得到屬性名稱
String attrName = attributes.getName(i);
//得到屬性值
String attrValue = attributes.getValue(i);
sb.append(" "+attrName+"=""+attrValue+""");
}
}
sb.append(">");
}
/**
* 文字內容
*/
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
//得到當前讀取的文字
String content = new String(ch,start,length);
sb.append(content);
}
/**
* 結束標籤
*/
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
sb.append("</"+qName+">");
}
}
例項2:使用sax解析把 xml文件封裝成物件:
主程式入口:
public static void main(String[] args)throws Exception {
SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
MyDefaultHandler3 handler = new MyDefaultHandler3();
parser.parse(new File(".\src\contact.xml"), handler);
List<Contact> list = handler.getList();
for (Contact contact : list) {
System.out.println(contact);
}
}
自定義類重寫DefaultHandler方法
public class MyDefaultHandler3 extends DefaultHandler {
//儲存所有聯絡人物件
private List<Contact> list = new ArrayList<Contact>();
public List<Contact> getList(){
return list;
}
//儲存一個聯絡人資訊
private Contact contact;
/**
* 思路:
* 1)建立Contact物件
* 2)把每個contact標籤內容存入到Contact物件
* 3)把Contact物件放入List中
*/
//用於臨時儲存當前讀到的標籤名
private String curTag;
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
curTag = qName;
//讀取到contact的開始標籤建立Contact物件
if("contact".equals(qName)){
contact = new Contact();
//設定id值
contact.setId(attributes.getValue("id"));
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
//當前文字內容
String content = new String(ch,start,length);
if("name".equals(curTag)){
contact.setName(content);
}
if("age".equals(curTag)){
contact.setAge(content);
}
if("phone".equals(curTag)){
contact.setPhone(content);
}
if("email".equals(curTag)){
contact.setEmail(content);
}
if("qq".equals(curTag)){
contact.setQq(content);
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
//設定空時為了避免空格換行設定到物件的屬性中
curTag = null;
//讀到contact的結束標籤放入List中
if("contact".equals(qName)){
list.add(contact);
}
}
}
注意:為什麼endElement要設定curTag = null?
因為 characters方法是遇到text文字就執行
,如果遇到<contact>和<name>
之間的空格和換行 也會執行 ,而這時 curTag 還是原來的標籤名字,這樣子就會覆蓋到物件的屬性中,導致出現 空格換行覆蓋原來屬性。
相關文章
- jaxp的sax解析操作
- dom解析和sax解析的區別
- XML解析-最快的方式SAXXML
- [硬核] Bootstrap Blazor Table 綜合演示例子bootBlazor
- Flutter遊戲引擎Flame -- 教程翻譯和例子解析Flutter遊戲引擎
- Docker小白到實戰之Dockerfile解析及實戰演示,果然順手Docker
- 【python小例子】小例子拾憶Python
- 請利用SAX編寫程式解析Yahoo的XML格式的天氣預報,獲取天氣預報——python學習筆記XMLPython筆記
- Androidxml資料的讀取和寫入(sax,pull,dom,xstream,jsoup)AndroidXMLJS
- awk例子
- 4.5.1.1.2 例子
- GraphQL案例演示
- popmenu的例子
- java socket例子Java
- 氣泡排序演示排序
- WebSocket 程式碼演示Web
- jpa @Query demo 演示
- Qt表格排序例子QT排序
- CSS 權值例子CSS
- expdp一個例子
- mybatis小例子2MyBatis
- dockerfile測試例子Docker
- Java String length()例子Java
- PySpark DataFrame教程與演示Spark
- 36_綜合演示
- Java JMS 極簡演示Java
- 質押挖礦系統開發(流程解析) | 質押挖礦系統開發(原始碼演示)原始碼
- Python練手例子(14)Python
- Python練手例子(13)Python
- python字典的小例子Python
- Python練手例子(16)Python
- CompletableFuture 的 20 個例子
- [20190312]bash IFS例子.txt
- python類例子(開槍)Python
- 從例子來看BFC
- Python練手例子(6)Python
- 小例子理解多型多型
- While True用法小例子While