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 還是原來的標籤名字,這樣子就會覆蓋到物件的屬性中,導致出現 空格換行覆蓋原來屬性。
相關文章
- DOM解析和SAX解析
- jaxp的sax解析操作
- java使用sax解析xmlJavaXML
- dom解析和sax解析的區別
- 使用JAXP進行DOM解析_SAX解析
- XML解析-最快的方式SAXXML
- python使用SAX解析xmlPythonXML
- JAVA-使用SAX解析XML資料JavaXML
- Android系列--DOM、SAX、Pull解析XMLAndroidXML
- python 解析xml 檔案: SAX方式PythonXML
- Python解析xml大檔案(sax)PythonXML
- XML解析的兩種方式DOM和SAXXML
- SAX無法正確解析日期資料
- [硬核] Bootstrap Blazor Table 綜合演示例子bootBlazor
- 關於SAX解析xml檔案的問題XML
- 用Java結合SAX 2.0 解析XML文件 (轉)JavaXML
- :Android網路程式設計--XML之解析方式:SAXAndroid程式設計XML
- 字元驅動小例子解析字元
- Java解析XML彙總(DOM/SAX/JDOM/DOM4j/XPath)JavaXML
- 使用JAXP進行SAX解析(XMLReaderFactory、XMLReader 、SAXParserFactory與SAXParser)XML
- SAX解析XML檔案有關characters的最大長度2048的問題XML
- Sax 解析xml檔案時, 資料資訊不完整問題解決方法XML
- SAX處理XML例項XML
- Flutter遊戲引擎Flame -- 教程翻譯和例子解析Flutter遊戲引擎
- json listView 資料請求解析小例子JSONView
- Android解析XML和JSON(部落格例子)AndroidXMLJSON
- RxJava原始碼解析(一)從一個例子開始RxJava原始碼
- JAVA與DOM解析器提高(DOM/SAX/JDOM/DOM4j/XPath) 學習筆記二Java筆記
- XML的四種解析器(dom_sax_jdom_dom4j)原理及效能比較[收藏]XML
- POI 使用SAX讀取大資料Excel大資料Excel
- Docker小白到實戰之Dockerfile解析及實戰演示,果然順手Docker
- 例子解析C++的引用,傳參,const的相關特點C++
- go演示工具 - go 社群是如何做演示的?Go
- 【python小例子】小例子拾憶Python
- WPS演示將演示文件轉換成Flash檔案
- split 例子
- WebSocket 程式碼演示Web
- 氣泡排序演示排序