日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

对xml文件的sax解析(增删改查)之一

發布時間:2024/10/12 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对xml文件的sax解析(增删改查)之一 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

crud(增刪改查):

c:creat

r:retrieve

u:update

d:delete

以下筆記來自于韓順平老師的講解。

現在是用java來操作。

第一步:新建java工程。file-new-Java Project,輸入工程的名字,點擊finish.

第二步:放一個待解析的xml文件(classes.xml)到工程項目中的src目錄中。

classes.xml文件的內容是:

<?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技術解析xml文件(有套路)。//第一步,創建SaxParserFactory:SAXParserFactory spf=SAXParserFactory.newInstance();//第二步,創建SaxParser解析器:SAXParser saxParser=spf.newSAXParser();//第三步,把xml文件和【事件處理對象】關聯saxParser.parse("src/classes.xml",new myDefaultHandle_wodelei());//第二個參數用于關聯下面定義的事件處理類}} //定義事件處理類 class myDefaultHandle_wodelei extends DefaultHandler{@Override//該函數發現文檔開始:public void startDocument() throws SAXException {// TODO Auto-generated method stubSystem.out.println("發現文檔開始的函數:startDocument()");super.startDocument();}@Override//該函數順序發現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//該函數發現xml文件中的文本:public void characters(char[] ch, int start, int length) throws SAXException {// TODO Auto-generated method stubsuper.characters(ch, start, length);}@Override//該函數發現xml文件中一個元素的結束(即發現這樣的標簽:</xx>):public void endElement(String uri, String localName, String qName) throws SAXException {// TODO Auto-generated method stubsuper.endElement(uri, localName, qName);}@Override//該函數發現整個xml文件的結束:public void endDocument() throws SAXException {// TODO Auto-generated method stubSystem.out.println("發現文檔結束的函數:endDocument()");super.endDocument();}}/*運行結果:發現文檔開始的函數:startDocument() 元素名稱:班級 元素名稱:學生 元素名稱:名字 元素名稱:年齡 元素名稱:介紹 元素名稱:學生 元素名稱:名字 元素名稱:年齡 元素名稱:介紹 發現文檔結束的函數: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技術解析xml文件(有套路)。//第一步,創建SaxParserFactory:SAXParserFactory spf=SAXParserFactory.newInstance();//第二步,創建SaxParser解析器:SAXParser saxParser=spf.newSAXParser();//第三步,把xml文件和【事件處理對象】關聯saxParser.parse("src/classes.xml",new myDefaultHandle_wodelei());//第二個參數用于關聯下面定義的事件處理類}} //定義事件處理類 class myDefaultHandle_wodelei extends DefaultHandler{@Override//該函數發現文檔開始:public void startDocument() throws SAXException {// TODO Auto-generated method stubSystem.out.println("發現文檔開始的函數:startDocument()");super.startDocument();}@Override//該函數順序發現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//該函數發現xml文件中的文本:public void characters(char[] ch, int start, int length) throws SAXException {// TODO Auto-generated method stub//參數解釋:ch其實是文檔本身//顯示文本內容:System.out.println(new String(ch,start,length));//super.characters(ch, start, length);//這句系統給的可以不要了}@Override//該函數發現xml文件中一個元素的結束(即發現這樣的標簽:</xx>):public void endElement(String uri, String localName, String qName) throws SAXException {// TODO Auto-generated method stubsuper.endElement(uri, localName, qName);}@Override//該函數發現整個xml文件的結束:public void endDocument() throws SAXException {// TODO Auto-generated method stubSystem.out.println("發現文檔結束的函數:endDocument()");super.endDocument();}}/*發現文檔開始的函數:startDocument() 元素名稱:班級元素名稱:學生元素名稱:名字 周星馳元素名稱:年齡 23元素名稱:介紹 學習刻苦元素名稱:學生元素名稱:名字 林青霞元素名稱:年齡 32元素名稱:介紹 是一個好學生發現文檔結束的函數:endDocument()*/

以上程序打印很多空行的原因是:xml文件中每個元素或屬性值后面有空行。

解決辦法1,手工去掉空行,左右內容全部換到一行字,沒有空行就不會打印空格了:

解決辦法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技術解析xml文件(有套路)。//第一步,創建SaxParserFactory:SAXParserFactory spf=SAXParserFactory.newInstance();//第二步,創建SaxParser解析器:SAXParser saxParser=spf.newSAXParser();//第三步,把xml文件和【事件處理對象】關聯saxParser.parse("src/classes.xml",new myDefaultHandle_wodelei());//第二個參數用于關聯下面定義的事件處理類}} //定義事件處理類 class myDefaultHandle_wodelei extends DefaultHandler{@Override//該函數發現文檔開始:public void startDocument() throws SAXException {// TODO Auto-generated method stubSystem.out.println("發現文檔開始的函數:startDocument()");super.startDocument();}@Override//該函數順序發現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//該函數發現xml文件中的文本:public void characters(char[] ch, int start, int length) throws SAXException {// TODO Auto-generated method stubString con=new String(ch,start,length);//這是接收到的文本內容if(!con.trim().equals("")) //trim()的目的是消除文本兩端的空行{//參數解釋:ch其實是文檔本身//顯示文本內容:System.out.println(new String(ch,start,length));//super.characters(ch, start, length);//這句系統給的可以不要了}}@Override//該函數發現xml文件中一個元素的結束(即發現這樣的標簽:</xx>):public void endElement(String uri, String localName, String qName) throws SAXException {// TODO Auto-generated method stubsuper.endElement(uri, localName, qName);}@Override//該函數發現整個xml文件的結束:public void endDocument() throws SAXException {// TODO Auto-generated method stubSystem.out.println("發現文檔結束的函數:endDocument()");super.endDocument();}}/*運行結果:發現文檔開始的函數:startDocument() 元素名稱:班級 元素名稱:學生 元素名稱:名字 周星馳 元素名稱:年齡 23 元素名稱:介紹 學習刻苦 元素名稱:學生 元素名稱:名字 林青霞 元素名稱:年齡 32 元素名稱:介紹 是一個好學生 發現文檔結束的函數: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技術解析xml文件(有套路)。//第一步,創建SaxParserFactory:SAXParserFactory spf=SAXParserFactory.newInstance();//第二步,創建SaxParser解析器:SAXParser saxParser=spf.newSAXParser();//第三步,把xml文件和【事件處理對象】關聯saxParser.parse("src/classes.xml",new myDefaultHandle_wodelei());//第二個參數用于關聯下面定義的事件處理類}} //定義事件處理類 class myDefaultHandle_wodelei extends DefaultHandler{@Override//該函數發現文檔開始:public void startDocument() throws SAXException {// TODO Auto-generated method stubSystem.out.println("發現文檔開始的函數:startDocument()");super.startDocument();}@Override//該函數順序發現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//該函數發現xml文件中的文本:public void characters(char[] ch, int start, int length) throws SAXException {// TODO Auto-generated method stubString con=new String(ch,start,length);//這是接收到的文本內容if(!con.trim().equals("")) //trim()的目的是消除文本兩端的空行{//參數解釋:ch其實是文檔本身//顯示文本內容:System.out.println(new String(ch,start,length));//super.characters(ch, start, length);//這句系統給的可以不要了}}@Override//該函數發現xml文件中一個元素的結束(即發現這樣的標簽:</xx>):public void endElement(String uri, String localName, String qName) throws SAXException {// TODO Auto-generated method stubsuper.endElement(uri, localName, qName);}@Override//該函數發現整個xml文件的結束:public void endDocument() throws SAXException {// TODO Auto-generated method stubSystem.out.println("發現文檔結束的函數:endDocument()");super.endDocument();}}/*運行結果:發現文檔開始的函數:startDocument() 元素名稱=班級 元素名稱=學生 元素名稱=名字 周星馳 元素名稱=年齡 23 元素名稱=介紹 學習刻苦 元素名稱=學生 元素名稱=名字 林青霞 元素名稱=年齡 32 元素名稱=介紹 是一個好學生 發現文檔結束的函數:endDocument()*/

?


?小結:sax技術的一個缺陷是不能對xml文件進行增、刪、改,它主要用來對xml文件進行遍歷解析。?

?

轉載于:https://www.cnblogs.com/yibeimingyue/p/9973568.html

總結

以上是生活随笔為你收集整理的对xml文件的sax解析(增删改查)之一的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。