对xml文件的sax解析(增删改查)之一
生活随笔
收集整理的這篇文章主要介紹了
对xml文件的sax解析(增删改查)之一
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?
crud(增刪改查):
c:creat
r:retrieve
u:update
d:delete
以下筆記來自于韓順平老師的講解。
現(xiàn)在是用java來操作。
第一步:新建java工程。file-new-Java Project,輸入工程的名字,點擊finish.
第二步:放一個待解析的xml文件(classes.xml)到工程項目中的src目錄中。
classes.xml文件的內(nèi)容是:
<?xml version="1.0" encoding="UTF-8"?> <班級><學生><名字>周星馳</名字><年齡>23</年齡><介紹>學習刻苦</介紹></學生><學生><名字>林青霞</名字><年齡>32</年齡><介紹>是一個好學生</介紹></學生> </班級>第三步:寫一個java程序去解析這個xml文件。對著src右鍵,new-package,輸入包名com.saxparsetest,點擊finishl。
第四步:對著com.saxparsetest右鍵,寫一個測試java測試程序,new-class:
第五步:可以愉快的開始寫代碼了。
package com.saxparsetest;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 saxparse {public static void main(String[] args) throws Exception, SAXException {// TODO Auto-generated method stub//使用sax技術(shù)解析xml文件(有套路)。//第一步,創(chuàng)建SaxParserFactory:SAXParserFactory spf=SAXParserFactory.newInstance();//第二步,創(chuàng)建SaxParser解析器:SAXParser saxParser=spf.newSAXParser();//第三步,把xml文件和【事件處理對象】關聯(lián)saxParser.parse("src/classes.xml",new myDefaultHandle_wodelei());//第二個參數(shù)用于關聯(lián)下面定義的事件處理類}} //定義事件處理類 class myDefaultHandle_wodelei extends DefaultHandler{@Override//該函數(shù)發(fā)現(xiàn)文檔開始:public void startDocument() throws SAXException {// TODO Auto-generated method stubSystem.out.println("發(fā)現(xiàn)文檔開始的函數(shù):startDocument()");super.startDocument();}@Override//該函數(shù)順序發(fā)現(xiàn)xml文件中的元素(【推的機制】):public void startElement(String arg0, String arg1, String arg2, Attributes arg3) throws SAXException {// TODO Auto-generated method stubSystem.out.println("元素名稱:"+arg2);super.startElement(arg0, arg1, arg2, arg3);}@Override//該函數(shù)發(fā)現(xiàn)xml文件中的文本:public void characters(char[] ch, int start, int length) throws SAXException {// TODO Auto-generated method stubsuper.characters(ch, start, length);}@Override//該函數(shù)發(fā)現(xiàn)xml文件中一個元素的結(jié)束(即發(fā)現(xiàn)這樣的標簽:</xx>):public void endElement(String uri, String localName, String qName) throws SAXException {// TODO Auto-generated method stubsuper.endElement(uri, localName, qName);}@Override//該函數(shù)發(fā)現(xiàn)整個xml文件的結(jié)束:public void endDocument() throws SAXException {// TODO Auto-generated method stubSystem.out.println("發(fā)現(xiàn)文檔結(jié)束的函數(shù):endDocument()");super.endDocument();}}/*運行結(jié)果:發(fā)現(xiàn)文檔開始的函數(shù):startDocument() 元素名稱:班級 元素名稱:學生 元素名稱:名字 元素名稱:年齡 元素名稱:介紹 元素名稱:學生 元素名稱:名字 元素名稱:年齡 元素名稱:介紹 發(fā)現(xiàn)文檔結(jié)束的函數(shù):endDocument()*/?
package com.saxparsetest;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 saxparse {public static void main(String[] args) throws Exception, SAXException {// TODO Auto-generated method stub//使用sax技術(shù)解析xml文件(有套路)。//第一步,創(chuàng)建SaxParserFactory:SAXParserFactory spf=SAXParserFactory.newInstance();//第二步,創(chuàng)建SaxParser解析器:SAXParser saxParser=spf.newSAXParser();//第三步,把xml文件和【事件處理對象】關聯(lián)saxParser.parse("src/classes.xml",new myDefaultHandle_wodelei());//第二個參數(shù)用于關聯(lián)下面定義的事件處理類}} //定義事件處理類 class myDefaultHandle_wodelei extends DefaultHandler{@Override//該函數(shù)發(fā)現(xiàn)文檔開始:public void startDocument() throws SAXException {// TODO Auto-generated method stubSystem.out.println("發(fā)現(xiàn)文檔開始的函數(shù):startDocument()");super.startDocument();}@Override//該函數(shù)順序發(fā)現(xiàn)xml文件中的元素(【推的機制】):public void startElement(String arg0, String arg1, String arg2, Attributes arg3) throws SAXException {// TODO Auto-generated method stubSystem.out.println("元素名稱:"+arg2);//super.startElement(arg0, arg1, arg2, arg3);//這句系統(tǒng)給的可以不要了}@Override//該函數(shù)發(fā)現(xiàn)xml文件中的文本:public void characters(char[] ch, int start, int length) throws SAXException {// TODO Auto-generated method stub//參數(shù)解釋:ch其實是文檔本身//顯示文本內(nèi)容:System.out.println(new String(ch,start,length));//super.characters(ch, start, length);//這句系統(tǒng)給的可以不要了}@Override//該函數(shù)發(fā)現(xiàn)xml文件中一個元素的結(jié)束(即發(fā)現(xiàn)這樣的標簽:</xx>):public void endElement(String uri, String localName, String qName) throws SAXException {// TODO Auto-generated method stubsuper.endElement(uri, localName, qName);}@Override//該函數(shù)發(fā)現(xiàn)整個xml文件的結(jié)束:public void endDocument() throws SAXException {// TODO Auto-generated method stubSystem.out.println("發(fā)現(xiàn)文檔結(jié)束的函數(shù):endDocument()");super.endDocument();}}/*發(fā)現(xiàn)文檔開始的函數(shù):startDocument() 元素名稱:班級元素名稱:學生元素名稱:名字 周星馳元素名稱:年齡 23元素名稱:介紹 學習刻苦元素名稱:學生元素名稱:名字 林青霞元素名稱:年齡 32元素名稱:介紹 是一個好學生發(fā)現(xiàn)文檔結(jié)束的函數(shù):endDocument()*/以上程序打印很多空行的原因是:xml文件中每個元素或?qū)傩灾岛竺嬗锌招小?/p>
解決辦法1,手工去掉空行,左右內(nèi)容全部換到一行字,沒有空行就不會打印空格了:
解決辦法2,在程序中加入判斷:
package com.saxparsetest;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 saxparse {public static void main(String[] args) throws Exception, SAXException {// TODO Auto-generated method stub//使用sax技術(shù)解析xml文件(有套路)。//第一步,創(chuàng)建SaxParserFactory:SAXParserFactory spf=SAXParserFactory.newInstance();//第二步,創(chuàng)建SaxParser解析器:SAXParser saxParser=spf.newSAXParser();//第三步,把xml文件和【事件處理對象】關聯(lián)saxParser.parse("src/classes.xml",new myDefaultHandle_wodelei());//第二個參數(shù)用于關聯(lián)下面定義的事件處理類}} //定義事件處理類 class myDefaultHandle_wodelei extends DefaultHandler{@Override//該函數(shù)發(fā)現(xiàn)文檔開始:public void startDocument() throws SAXException {// TODO Auto-generated method stubSystem.out.println("發(fā)現(xiàn)文檔開始的函數(shù):startDocument()");super.startDocument();}@Override//該函數(shù)順序發(fā)現(xiàn)xml文件中的元素(【推的機制】):public void startElement(String arg0, String arg1, String arg2, Attributes arg3) throws SAXException {// TODO Auto-generated method stubSystem.out.println("元素名稱:"+arg2);//super.startElement(arg0, arg1, arg2, arg3);//這句系統(tǒng)給的可以不要了}@Override//該函數(shù)發(fā)現(xiàn)xml文件中的文本:public void characters(char[] ch, int start, int length) throws SAXException {// TODO Auto-generated method stubString con=new String(ch,start,length);//這是接收到的文本內(nèi)容if(!con.trim().equals("")) //trim()的目的是消除文本兩端的空行{//參數(shù)解釋:ch其實是文檔本身//顯示文本內(nèi)容:System.out.println(new String(ch,start,length));//super.characters(ch, start, length);//這句系統(tǒng)給的可以不要了}}@Override//該函數(shù)發(fā)現(xiàn)xml文件中一個元素的結(jié)束(即發(fā)現(xiàn)這樣的標簽:</xx>):public void endElement(String uri, String localName, String qName) throws SAXException {// TODO Auto-generated method stubsuper.endElement(uri, localName, qName);}@Override//該函數(shù)發(fā)現(xiàn)整個xml文件的結(jié)束:public void endDocument() throws SAXException {// TODO Auto-generated method stubSystem.out.println("發(fā)現(xiàn)文檔結(jié)束的函數(shù):endDocument()");super.endDocument();}}/*運行結(jié)果:發(fā)現(xiàn)文檔開始的函數(shù):startDocument() 元素名稱:班級 元素名稱:學生 元素名稱:名字 周星馳 元素名稱:年齡 23 元素名稱:介紹 學習刻苦 元素名稱:學生 元素名稱:名字 林青霞 元素名稱:年齡 32 元素名稱:介紹 是一個好學生 發(fā)現(xiàn)文檔結(jié)束的函數(shù):endDocument()*/或者:
package com.saxparsetest;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 saxparse {public static void main(String[] args) throws Exception, SAXException {// TODO Auto-generated method stub//使用sax技術(shù)解析xml文件(有套路)。//第一步,創(chuàng)建SaxParserFactory:SAXParserFactory spf=SAXParserFactory.newInstance();//第二步,創(chuàng)建SaxParser解析器:SAXParser saxParser=spf.newSAXParser();//第三步,把xml文件和【事件處理對象】關聯(lián)saxParser.parse("src/classes.xml",new myDefaultHandle_wodelei());//第二個參數(shù)用于關聯(lián)下面定義的事件處理類}} //定義事件處理類 class myDefaultHandle_wodelei extends DefaultHandler{@Override//該函數(shù)發(fā)現(xiàn)文檔開始:public void startDocument() throws SAXException {// TODO Auto-generated method stubSystem.out.println("發(fā)現(xiàn)文檔開始的函數(shù):startDocument()");super.startDocument();}@Override//該函數(shù)順序發(fā)現(xiàn)xml文件中的元素(【推的機制】):public void startElement(String arg0, String arg1, String arg2, Attributes arg3) throws SAXException {// TODO Auto-generated method stubSystem.out.println("元素名稱="+arg2);//super.startElement(arg0, arg1, arg2, arg3);//這句系統(tǒng)給的可以不要了}@Override//該函數(shù)發(fā)現(xiàn)xml文件中的文本:public void characters(char[] ch, int start, int length) throws SAXException {// TODO Auto-generated method stubString con=new String(ch,start,length);//這是接收到的文本內(nèi)容if(!con.trim().equals("")) //trim()的目的是消除文本兩端的空行{//參數(shù)解釋:ch其實是文檔本身//顯示文本內(nèi)容:System.out.println(new String(ch,start,length));//super.characters(ch, start, length);//這句系統(tǒng)給的可以不要了}}@Override//該函數(shù)發(fā)現(xiàn)xml文件中一個元素的結(jié)束(即發(fā)現(xiàn)這樣的標簽:</xx>):public void endElement(String uri, String localName, String qName) throws SAXException {// TODO Auto-generated method stubsuper.endElement(uri, localName, qName);}@Override//該函數(shù)發(fā)現(xiàn)整個xml文件的結(jié)束:public void endDocument() throws SAXException {// TODO Auto-generated method stubSystem.out.println("發(fā)現(xiàn)文檔結(jié)束的函數(shù):endDocument()");super.endDocument();}}/*運行結(jié)果:發(fā)現(xiàn)文檔開始的函數(shù):startDocument() 元素名稱=班級 元素名稱=學生 元素名稱=名字 周星馳 元素名稱=年齡 23 元素名稱=介紹 學習刻苦 元素名稱=學生 元素名稱=名字 林青霞 元素名稱=年齡 32 元素名稱=介紹 是一個好學生 發(fā)現(xiàn)文檔結(jié)束的函數(shù):endDocument()*/?
?小結(jié):sax技術(shù)的一個缺陷是不能對xml文件進行增、刪、改,它主要用來對xml文件進行遍歷解析。?
?
轉(zhuǎn)載于:https://www.cnblogs.com/yibeimingyue/p/9973568.html
總結(jié)
以上是生活随笔為你收集整理的对xml文件的sax解析(增删改查)之一的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 银行星期日可以办理业务吗
- 下一篇: java单例模式几种实现方式