




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
XML文件的三種解析方式舉例講解
XML文件的三種解析方式舉例講解
解析xml文檔
Dom解析
Sax解析
Pull解析
Dom解析
①把整個文檔先加載到內(nèi)存中->Document所以可以對文檔進行修改
②如果文件比擬大可能會導(dǎo)致內(nèi)存溢出
編程思路DocumentBuilderFactory->DocumentBuilder->Document->通過節(jié)點獲得NodeList->具體的Node
如果想修改TransformerFactory->Transformer->transform(Souce,result)
publicclassDomParseTest{
2.
3.@Test
4.publicvoiddomParse()throwsException{
5.//獲取DocumentBuilderFactory
6.DocumentBuilderFactorybuilderFactory=DocumentBuilderFactory.newInstance();
7.//獲取DocumentBuilder
8.DocumentBuilderdocumentBuilder=builderFactory.newDocumentBuilder();
9.//通過documentBuilder解析xml文檔獲得Document對象
10.Documentdocument=documentBuilder.parse("book.xml");
11.//通過元素的名字可以找到元素的匯合
12.NodeListnodeList=document.getElementsByTagName("售價");
13.//nodeList.getLength();
14.for(inti=0;i
15.Nodenode=nodeList.item(i);
16.Stringcontent=node.getTextContent();
17.System.out.println(content);
18.}
19.//找到第二個元素
20.Nodenode=nodeList.item(0);
21.//讀出對應(yīng)節(jié)點的文本內(nèi)容
22.Stringcontent=node.getTextContent();
23.System.out.println(content);
24.}
25.
26.@Test
27.publicvoiddomModifyxml()throwsException{
28.DocumentBuilderFactorydocumentBuilderFactory=DocumentBuilderFactory.newInstance();
29.DocumentBuilderbuilder=documentBuilderFactory.newDocumentBuilder();
30.Documentdocument=builder.parse("book.xml");
31.NodeListnodeList=document.getElementsByTagName("售價");
32.Nodenode=nodeList.item(1);
33.//修改節(jié)點的內(nèi)容
34.node.setTextContent("199.00元");
35.
36.TransformerFactorytransformerFactory=TransformerFactory.newInstance();
37.Transformertransformer=transformerFactory.newTransformer();
38.//數(shù)據(jù)源
39.SourcexmlSource=newDOMSource(document);
40.//要輸出到的目的地
41.ResultoutputTarget=newStreamResult("book.xml");
42.transformer.transform(xmlSource,outputTarget);
43.}
44.}
sax
原理一個元素一個元素解析解析到一個元素調(diào)用相關(guān)的辦法startDocument()文檔開始endDocument文檔結(jié)束startElement元素開始endElement元素結(jié)束characters文本內(nèi)容
@Test
2.publicvoidsaxParser()throwsException{
3.//獲取工廠
4.SAXParserFactoryparserFactory=SAXParserFactory.newInstance();
5.SAXParsersaxParser=parserFactory.newSAXParser();
6.//獲取xmlReader通過這個reader可以試著ContentHandler
7.XMLReaderxmlReader=saxParser.getXMLReader();
8.//給xmlReader設(shè)置contentHandlercontentHandler是一個接口里面太多的辦法沒實現(xiàn)
9.//不去直接實現(xiàn)contenthandler而是繼承它默認(rèn)的實現(xiàn)DefaultHandler
10.xmlReader.setContentHandler(newMyhandler());
11.//解析xml文檔
12.xmlReader.parse("book.xml");
13.}
14.
15.privateclassMyhandlerextendsDefaultHandler{
16.
17.@Override
18.publicvoidstartDocument()throwsSAXException{
19.System.out.println("文檔開始");
20.}
21.
22.@Override
23.publicvoidendDocument()throwsSAXException{
24.System.out.println("文檔結(jié)束");
25.}
26.
27.@Override
28.publicvoidstartElement(Stringuri,StringlocalName,StringqName,Attributesattributes)
29.throwsSAXException{
30.System.out.println("開始標(biāo)簽");
31.}
32.
33.@Override
34.publicvoidendElement(Stringuri,StringlocalName,StringqName)throwsSAXException{
35.System.out.println("結(jié)束標(biāo)簽");
36.}
37.
38.@Override
39.publicvoidcharacters(char[]ch,intstart,intlength)throwsSAXException{
40.//文本內(nèi)容
41.Stringtext=newString(ch,start,length);
42.System.out.println("文本內(nèi)容"+text);
43.}
44.
45.}
調(diào)用next辦法解析下一個元素每調(diào)用一次解析一個元素
publicclassPullParserTest{
2.
3.@Test
4.publicvoidpullTest()throwsException{
5.ArrayListbooks=null;
6.Bookbook=null;
7.//獲取工廠
8.XmlPullParserFactoryparserFactory=XmlPullParserFactory.newInstance();
9.//獲取到xml的解析器
10.XmlPullParserparser=parserFactory.newPullParser();
11.//給解析器設(shè)置一個輸入源
12.//第一個參數(shù)輸入流第二個參數(shù)文檔用到的字符編碼集
13.parser.setInput(newFileInputStream(newFile("book.xml")),"utf-8");
14.//獲取當(dāng)前事件類型
15.inteventType=parser.getEventType();
16.booleanflag=true;
17.while(eventType!=XmlPullParser.END_DOCUMENT&&flag){
18.switch(eventType){
19.caseXmlPullParser.START_TAG:
20.//開始標(biāo)簽
21.//parser.getName獲取當(dāng)前事件對應(yīng)的元素名字
22.if("書架".equals(parser.getName())){
23.//創(chuàng)立一個匯合
24.books=newArrayList();
25.}elseif("書".equals(parser.getName())){
26.//創(chuàng)立一個book對象
27.book=newBook();
28.}elseif("書名".equals(parser.getName())){
29.//給book對象設(shè)置書名的屬性
30.book.setTitle(parser.nextText());//parser.nextText()獲取當(dāng)前節(jié)點的下一個文本內(nèi)容
31.}elseif("作者".equals(parser.getName())){
32.//給book對象設(shè)置作者的屬性
33.book.setAuthor(parser.nextText());
34.}elseif("售價".equals(parser.getName())){
35.//給book對象設(shè)置售價的屬性
36.book.setPrice(parser.nextText());
37.}
38.break;
39.caseXmlPullParser.END_TAG:
40.//結(jié)束標(biāo)簽
41.if("書".equals(parser.getName())){
42.//把book對象添加到匯合中
43.books.add(book);
44.flag=false;
45.}
46.break;
47.}
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 宅基地買賣合同書
- 場大廳攤位租賃合同
- 志愿者服務(wù)期間安全責(zé)任協(xié)議書
- 農(nóng)業(yè)生產(chǎn)綠色轉(zhuǎn)型發(fā)展指南
- 場地租賃合同場地房屋租賃合同
- 廣東省佛山市順德區(qū)2024-2025學(xué)年七年級上學(xué)期期末數(shù)學(xué)試卷(原卷版+解析版)
- 門頭柱大理石的施工方案
- 閩侯滅蟑滅鼠施工方案
- 溝槽支撐施工方案
- 清遠防爆負(fù)壓風(fēng)機施工方案
- 2025中高考百日誓師大會教師表態(tài)發(fā)言稿:百日競渡立壯志 師生同心鑄輝煌
- 2025體育單招英語備考100個高頻名詞精講(精校打印版)
- 2025年皖北衛(wèi)生職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫審定版
- 臺球館裝修合同模板及明細
- DeepSeek:從入門到精通3天教程
- 2024-2025學(xué)年人教版數(shù)學(xué)七下 第七章 相交線與平行線(含答案)
- GB/T 44994-2024聲學(xué)助聽器驗配管理
- 裝卸車程序及人員管理規(guī)章制度范文(2篇)
- 2025年上海鐵路局集團公司招聘筆試參考題庫含答案解析
- 生活垃圾焚燒發(fā)電項目工程創(chuàng)優(yōu)(魯班獎)計劃
- 2024年04月北京中信銀行總行社會招考(423)筆試歷年參考題庫附帶答案詳解
評論
0/150
提交評論