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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/393799.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/393799.shtml
英文地址,請注明出處:http://en.pswp.cn/news/393799.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

算法訓練營 重編碼_編碼訓練營之后該做什么-以及如何獲得成功

算法訓練營 重編碼by Anthony Morris安東尼莫里斯(Anthony Morris) 編碼訓練營之后該做什么-以及如何獲得成功 (What to do — and how to find success — after a coding bootcamp) It’s almost been two years since I graduated from the Lighthouse Labs Web Developmen…

leetcode860. 檸檬水找零(貪心)

在檸檬水攤上&#xff0c;每一杯檸檬水的售價為 5 美元。 顧客排隊購買你的產品&#xff0c;&#xff08;按賬單 bills 支付的順序&#xff09;一次購買一杯。 每位顧客只買一杯檸檬水&#xff0c;然后向你付 5 美元、10 美元或 20 美元。你必須給每個顧客正確找零&#xff0…

linux防火墻開啟某端口命令行,linux上防火墻 開啟某個端口

linux下防火墻 開啟某個端口直接在/etc/sysconfig/iptables中增加一行&#xff1a;-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 8080 -j ACCEPT注意添加位置:-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT-A RH-Fi…

imp命令導入指定表_Sqoop 使用shell命令的各種參數的配置及使用方法

點擊上方藍色字體&#xff0c;選擇“設為星標”回復”資源“獲取更多資源本文作者&#xff1a;Sheep Sun本文鏈接&#xff1a;https://www.cnblogs.com/yangxusun9/p/12558683.html大數據技術與架構點擊右側關注&#xff0c;大數據開發領域最強公眾號&#xff01;暴走大數據點擊…

黑客頻繁來襲 關注云計算的安全與保障

本文講的是 : 黑客頻繁來襲 關注云計算的安全與保障 , 【IT168 資訊】日前&#xff0c;虎嗅網遭受網絡攻擊的事件&#xff0c;引起業內關注。2月27日晚&#xff0c;虎嗅網中斷訪問&#xff0c;虎嗅網新浪官方微博隨即發表聲明&#xff0c;表示網站受到惡意攻擊&#xff0c;隨…

51nod 1100:斜率最大

題目鏈接 斜率最大點對橫坐標必相鄰 #include <bits/stdc.h> using namespace std; const int maxn 1e4 100;struct point {int x, y, pos;bool operator < (const point& rhs)const{return x<rhs.x;} } a[maxn]; double xielv(point a, point b) {return (a…

ik分詞和jieba分詞哪個好_Pubseg:一種單雙字串的BiLSTM中文分詞工具

中文分詞是中文自然語言處理中的重要的步驟&#xff0c;有一個更高精度的中文分詞模型會顯著提升文檔分類、情感預測、社交媒體處理等任務的效果[1]。Pubseg是基于BiLSTM中文分詞工具&#xff0c;基于ICWS2005PKU語料訓練集訓練而成&#xff0c;其優點在于在ICWS2005-PKU語料下…

freecodecamp_freeCodeCamp.org隱私權政策:問題與解答

freecodecampWe take your privacy seriously. And we give you full control over your data.我們把你的隱私當回事。 而且&#xff0c;我們可以完全控制您的數據。 freeCodeCamp doesnt show you ads or sell your data to anyone. Our nonprofit is instead supported by t…

leetcode1029. 兩地調度(貪心算法)

公司計劃面試 2N 人。第 i 人飛往 A 市的費用為 costs[i][0]&#xff0c;飛往 B 市的費用為 costs[i][1]。 返回將每個人都飛到某座城市的最低費用&#xff0c;要求每個城市都有 N 人抵達。 示例&#xff1a; 輸入&#xff1a;[[10,20],[30,200],[400,50],[30,20]] 輸出&…

第一階段沖刺4

1、我昨天的成就&#xff1a;看相關android開發視頻&#xff0c;上網尋找如何實現app動畫效果2、遇到什么困難&#xff1a;網上的用的很高級&#xff0c;看不懂別人如何實現的&#xff0c;搬過來實現不了。3、今天的任務&#xff1a;繼續實現動畫效果。 轉載于:https://www.cnb…

小白做淘客店鋪新玩法

微信淘客在朋友圈刷了將近兩個月。有些大咖賺得盆滿缽滿&#xff0c;有些小白交了不少學費。有人日入幾千幾萬&#xff0c;也有入不敷出。在此咖妹并沒有褒貶之意&#xff0c;只是提醒大家&#xff0c;不光淘客如此&#xff0c;其他項目亦是如此&#xff0c;別人能做成功的項目…

局域網中實現linux與windows文件共享,使用samba組建Linux與Windows局域網實現文件共享...

使用samba&#xff0c;可以組建Windows與Linux的局域網&#xff0c;Linux我用的是Fedora Core 6。Samba軟件的最新版本可以從網站免費獲得。共可下得5個rpm&#xff0c;分別為&#xff1a;samba-3.0.24-1.i386.rpm&#xff1a;服務器端&#xff1b;samba-client-3.0.24-1.i386.…

python sum函數numpy_如何用numba加速python?

我把寫好的markdown導入進來&#xff0c;但是沒想到知乎的排版如此感人。如果對知乎排版不滿想要看高清清爽版&#xff0c;請移步微信公眾號原文 如何用numba加速python&#xff1f;同時歡迎關注前言說道現在最流行的語言&#xff0c;就不得不提python。可是python雖然容易上手…

服務概述

Android中的服務Service&#xff0c;和Activity不同的是不能與用戶交互的&#xff0c;不能自己啟動&#xff0c;系統的后臺運行&#xff0c;當程序退出時&#xff0c;我們沒有顯示的調用停止服務&#xff0c;那么這個Service就沒有結束&#xff0c;它仍然在后臺運行。Service和…

[ZJOI2019]麻將

Luogu5279 , LOJ3042題意&#xff1a;給出初始13張手牌&#xff0c;求理論可以和牌的最小輪數的期望&#xff0e;定義和牌為&#xff1a;4句話1對亂將&#xff0c;不能有杠&#xff1b;七對 原始題解-shadowice 寫得很好的題解 首先分析期望&#xff1a;\(<--\)所有和牌的步…

二進制搜索算法_二進制搜索的一個扭曲故事

二進制搜索算法by Divya Godayal通過Divya Godayal 二進制搜索的一個扭曲故事 (A twisted tale of Binary Search) Awesome. That’s how I feel right now. Writing my first solo tech article.太棒了 那就是我現在的感覺。 寫我的第一篇個人技術文章。 I must say I have …

leetcode1221. 分割平衡字符串(貪心算法)

在一個「平衡字符串」中&#xff0c;‘L’ 和 ‘R’ 字符的數量是相同的。 給出一個平衡字符串 s&#xff0c;請你將它分割成盡可能多的平衡字符串。 返回可以通過分割得到的平衡字符串的最大數量。 示例 1&#xff1a; 輸入&#xff1a;s “RLRRLLRLRL” 輸出&#xff1a…

javascript中對變量類型的推斷

本文正式地址&#xff1a;http://www.xiabingbao.com/javascript/2015/07/04/javascript-type 在JavaScript中&#xff0c;有5種基本數據類型和1種復雜數據類型&#xff0c;基本數據類型有&#xff1a;Undefined, Null, Boolean, Number和String。復雜數據類型是Object。Object…

U盤流暢運行linux發行版,做各種linux發行版的啟動U盤方法

偶用tuxboot先移植gparted到16GB的U盤。然后裁剪N個iso 做成一個U盤安裝或體驗N個系統的多功能盤。選單曬出來&#xff1a;default vesamenu.c32timeout 3000prompt 0menu title Android RHEL6.4 Ubuntu13.04 GpartedMENU BACKGROUND Gsplash.pnglabel 001menu label GRUB4DOSk…

采樣次數不同平均值不一樣_不同的真石漆裝飾效果也是不一樣的

外墻真石漆真的是一件很好的產品&#xff0c;具有防火性、防水性、安全且環保、粘力強、永不褪色等特點&#xff0c;無疑是人們較好的選擇&#xff0c;在很早之前就已經逐漸的取代了瓷磚和其他石材在人們心中的位置。真石漆的品種不止一種&#xff0c;按照裝飾效果我們可以分為…