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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java--xml文件读取(SAX)

發布時間:2023/11/30 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java--xml文件读取(SAX) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SAX解析原理:

?使用Handler去逐個分析遇到的每一個節點

SAX方式解析步奏:

創建xml解析需要的handler(parser.parse(file,handler))?

package com.imooc_xml.sax.handler;import java.util.ArrayList;import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler;import com.imooc_xml.sax.entity.Book;public class SAXParserHandler extends DefaultHandler {//使用全局變量可以使本類的各個方法通用,聯系int bookIndex = 0 ;String value = null;Book book = null;private ArrayList<Book> bookList = new ArrayList<Book>();public ArrayList<Book> getBookList() {return bookList;}/*** 用來遍歷xml文件的開始標簽*/@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {// TODO Auto-generated method stubsuper.startElement(uri, localName, qName, attributes);解析xml文件的節點屬性,只有book節點有屬性if(qName.equals("book")){book = new Book();bookIndex++;//已知book的屬性名 // attributes.getValue("id");//不知book元素的屬性名和個數int num = attributes.getLength();for(int i=0;i<num;i++){//book元素的第i+1個屬性名 attributes.getQName(i);attributes.getValue(i);if(attributes.getQName(i).equals("id")){book.setId(attributes.getValue(i));}}}else if (!qName.equals("book")&&!qName.equals("bookstore")){//節點名 System.out.println(qName);}}/*** 用來遍歷xml文件的結束標簽*/@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {// TODO Auto-generated method stubsuper.endElement(uri, localName, qName);//判斷是否針對一本書已經遍歷結束if (qName.equals("book")){bookList.add(book);book = null;System.out.println("結束遍歷第"+bookIndex+"本書");}else if(qName.equals("name")){book.setName(value);}else if(qName.equals("author")){book.setAuthor(value);}else if(qName.equals("year")){book.setYear(value);}else if(qName.equals("price")){book.setPrice(value);}else if(qName.equals("language")){book.setLanguage(value);}}@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {// TODO Auto-generated method stubsuper.characters(ch, start, length);//ch是節點之間的文本內容value = new String(ch, start, length);//判斷空格和換行if(!value.trim().equals("")){System.out.println(value);}}/*** 用來標志解析開始*/@Overridepublic void startDocument() throws SAXException {// TODO Auto-generated method stubsuper.startDocument();System.out.println("SAX解析開始");}/*** 用來標志解析結束*/@Overridepublic void endDocument() throws SAXException {// TODO Auto-generated method stubsuper.endDocument();System.out.println("SAX解析結束");} }

創建hanlder類

SAX解析準備工作:

package com.imooc_xml.sax.test;import java.io.IOException;import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory;import org.xml.sax.SAXException;import com.imooc_xml.sax.handler.SAXParserHandler;public class SAXTest {public static void main(String[] args) {//通過SAXParserFactory的靜態newInstance()方法獲取SAXParserFactory的實例factorySAXParserFactory factory = SAXParserFactory.newInstance();try {//通過factory獲取SAXParser實例SAXParser parser = factory.newSAXParser();//創建一個handler對象SAXParserHandler handler = new SAXParserHandler();parser.parse("xml/books.xml", handler);} catch (ParserConfigurationException | SAXException e) {e.printStackTrace();}catch (IOException e) {e.printStackTrace();}} }

?使用SAX解析xml文件的節點屬性:

//只有book節點有屬性if(qName.equals("book")){//已知book的屬性名 // attributes.getValue("id");//不知book元素的屬性名和個數‘int num = attributes.getLength();for(int i=0;i<num;i++){//book元素的第i+1個屬性名 attributes.getQName(i);attributes.getValue(i);}}

使用SAX解析xml文件的節點值

@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {// TODO Auto-generated method stubsuper.characters(ch, start, length);//ch是節點之間的文本內容value = new String(ch, start, length);//判斷空格和換行if(!value.trim().equals("")){System.out.println(value);}}

?

在Java中保留xml數據的結構

public class Book {private String id;private String name;private String author;private String year;private String price;private String language;

獲取對象集合:

handler.getBookList().size();for(Book book:handler.getBookList()){System.out.println(book.getId());
          ....}

?

轉載于:https://www.cnblogs.com/Nyan-Workflow-FC/p/6412246.html

總結

以上是生活随笔為你收集整理的java--xml文件读取(SAX)的全部內容,希望文章能夠幫你解決所遇到的問題。

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