- package ?com.xml.parseXml; ??
- ??
- import ?java.io.InputStream; ??
- ??
- import ?javax.xml.stream.XMLEventReader; ??
- import ?javax.xml.stream.XMLInputFactory; ??
- import ?javax.xml.stream.events.StartElement; ??
- import ?javax.xml.stream.events.XMLEvent; ??
- ??
- import ?com.xml.bean.Address; ??
- import ?com.xml.bean.ReadXmlFileStream; ??
- ??
- public ? class ?StAXParseXml?{ ??
- ???? private ? static ?Address?address?=? new ?Address(); ??
- ??
- ???? public ? static ? void ?main(String[]?args)?{ ??
- ??
- ???????? long ?lasting?=?System.currentTimeMillis(); ??
- ??
- ???????? try ?{ ??
- ????????????InputStream?in?=?ReadXmlFileStream.getXmlFileStream(); ??
- ??
- ????????????XMLInputFactory?xmlif?=?XMLInputFactory.newInstance(); ??
- ???????????? //?用于解析?XML?事件的頂層接口 ??
- ????????????XMLEventReader?reader?=?xmlif.createXMLEventReader(in); ??
- ???????????? //?處理標記事件的基礎事件接口 ??
- ????????????XMLEvent?event?=? null ; ??
- ??
- ???????????? while ?(reader.hasNext())?{ ??
- ????????????????event?=?reader.nextEvent(); ??
- ???????????????? if ?(event.isStartElement())?{? //?起始元素 ??
- ????????????????????StartElement?startElt?=?event.asStartElement(); ??
- ???????????????????? if ?(startElt.getName().getLocalPart().equals( "no" ))?{ ??
- ????????????????????????address.setNo(reader.getElementText()); ??
- ????????????????????}? else ? if ?(startElt.getName().getLocalPart().equals( "addr" ))?{ ??
- ????????????????????????address.setAddr(reader.getElementText()); ??
- ????????????????????????System.out.println(address); ??
- ????????????????????} ??
- ????????????????}? else ? if ?(event.isCharacters())?{? //?文本內容 ??
- ???????????????????? //?相鄰標記之間都是文本內容 ??
- ????????????????????System.out.println( "解析的是文本內容:" ??
- ????????????????????????????+?event.asCharacters().getData()); ??
- ????????????????}? else ? if ?(event.isEndElement())?{? //?結束元素 ??
- ????????????????????System.out.println( "解析的是結束標記:" ??
- ????????????????????????????+?event.asEndElement().getName()); ??
- ????????????????} ??
- ????????????} ??
- ????????}? catch ?(Exception?e)?{ ??
- ????????????e.printStackTrace(); ??
- ????????} ??
- ????????System.out.println( "運行時間:" ?+?(System.currentTimeMillis()?-?lasting) ??
- ????????????????+? "?毫秒" ); ??
- ??
- ????} ??
- ??
- }??
- package ?com.xml.parseXml; ??
- ??
- import ?java.io.InputStream; ??
- ??
- import ?javax.xml.stream.XMLEventReader; ??
- import ?javax.xml.stream.XMLInputFactory; ??
- import ?javax.xml.stream.events.StartElement; ??
- import ?javax.xml.stream.events.XMLEvent; ??
- ??
- import ?com.xml.bean.Address; ??
- import ?com.xml.bean.ReadXmlFileStream; ??
- ??
- public ? class ?StAXParseXml?{ ??
- ???? private ? static ?Address?address?=? new ?Address(); ??
- ??
- ???? public ? static ? void ?main(String[]?args)?{ ??
- ??
- ???????? long ?lasting?=?System.currentTimeMillis(); ??
- ??
- ???????? try ?{ ??
- ????????????InputStream?in?=?ReadXmlFileStream.getXmlFileStream(); ??
- ??
- ????????????XMLInputFactory?xmlif?=?XMLInputFactory.newInstance(); ??
- ???????????? //?用于解析?XML?事件的頂層接口 ??
- ????????????XMLEventReader?reader?=?xmlif.createXMLEventReader(in); ??
- ???????????? //?處理標記事件的基礎事件接口 ??
- ????????????XMLEvent?event?=? null ; ??
- ??
- ???????????? while ?(reader.hasNext())?{ ??
- ????????????????event?=?reader.nextEvent(); ??
- ???????????????? if ?(event.isStartElement())?{? //?起始元素 ??
- ????????????????????StartElement?startElt?=?event.asStartElement(); ??
- ???????????????????? if ?(startElt.getName().getLocalPart().equals( "no" ))?{ ??
- ????????????????????????address.setNo(reader.getElementText()); ??
- ????????????????????}? else ? if ?(startElt.getName().getLocalPart().equals( "addr" ))?{ ??
- ????????????????????????address.setAddr(reader.getElementText()); ??
- ????????????????????????System.out.println(address); ??
- ????????????????????} ??
- ????????????????}? else ? if ?(event.isCharacters())?{? //?文本內容 ??
- ???????????????????? //?相鄰標記之間都是文本內容 ??
- ????????????????????System.out.println( "解析的是文本內容:" ??
- ????????????????????????????+?event.asCharacters().getData()); ??
- ????????????????}? else ? if ?(event.isEndElement())?{? //?結束元素 ??
- ????????????????????System.out.println( "解析的是結束標記:" ??
- ????????????????????????????+?event.asEndElement().getName()); ??
- ????????????????} ??
- ????????????} ??
- ????????}? catch ?(Exception?e)?{ ??
- ????????????e.printStackTrace(); ??
- ????????} ??
- ????????System.out.println( "運行時間:" ?+?(System.currentTimeMillis()?-?lasting) ??
- ????????????????+? "?毫秒" ); ??
- ??
- ????} ??
- ??
- }??
package com.xml.parseXml; import java.io.InputStream; import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.events.StartElement; import javax.xml.stream.events.XMLEvent; import com.xml.bean.Address; import com.xml.bean.ReadXmlFileStream; public class StAXParseXml { private static Address address = new Address(); public static void main(String[] args) { long lasting = System.currentTimeMillis(); try { InputStream in = ReadXmlFileStream.getXmlFileStream(); XMLInputFactory xmlif = XMLInputFactory.newInstance(); // 用于解析 XML 事件的頂層接口 XMLEventReader reader = xmlif.createXMLEventReader(in); // 處理標記事件的基礎事件接口 XMLEvent event = null; while (reader.hasNext()) { event = reader.nextEvent(); if (event.isStartElement()) { // 起始元素 StartElement startElt = event.asStartElement(); if (startElt.getName().getLocalPart().equals("no")) { address.setNo(reader.getElementText()); } else if (startElt.getName().getLocalPart().equals("addr")) { address.setAddr(reader.getElementText()); System.out.println(address); } } else if (event.isCharacters()) { // 文本內容 // 相鄰標記之間都是文本內容 System.out.println("解析的是文本內容:" + event.asCharacters().getData()); } else if (event.isEndElement()) { // 結束元素 System.out.println("解析的是結束標記:" + event.asEndElement().getName()); } } } catch (Exception e) { e.printStackTrace(); } System.out.println("運行時間:" + (System.currentTimeMillis() - lasting) + " 毫秒"); } }
?
依賴的類:
1.Address .java
- package ?com.xml.bean; ??
- ??
- public ? class ?Address?{ ??
- ??
- ???? private ?String?no; ??
- ???? private ?String?addr; ??
- ???? /** ?
- ?????*?@return?the?no ?
- ?????*/ ??
- ???? public ?String?getNo()?{ ??
- ???????? return ?no; ??
- ????} ??
- ???? /** ?
- ?????*?@param?no?the?no?to?set ?
- ?????*/ ??
- ???? public ? void ?setNo(String?no)?{ ??
- ???????? this .no?=?no; ??
- ????} ??
- ???? /** ?
- ?????*?@return?the?addr ?
- ?????*/ ??
- ???? public ?String?getAddr()?{ ??
- ???????? return ?addr; ??
- ????} ??
- ???? /** ?
- ?????*?@param?addr?the?addr?to?set ?
- ?????*/ ??
- ???? public ? void ?setAddr(String?addr)?{ ??
- ???????? this .addr?=?addr; ??
- ????} ??
- ???? @Override ??
- ???? public ?String?toString()?{ ??
- ???????? return ? "編號:" ?+? this .no?+? ",地址:" ?+? this .addr; ??
- ????} ??
- ???? ??
- ???? ??
- }??
- package ?com.xml.bean; ??
- ??
- public ? class ?Address?{ ??
- ??
- ???? private ?String?no; ??
- ???? private ?String?addr; ??
- ???? /** ?
- ?????*?@return?the?no ?
- ?????*/ ??
- ???? public ?String?getNo()?{ ??
- ???????? return ?no; ??
- ????} ??
- ???? /** ?
- ?????*?@param?no?the?no?to?set ?
- ?????*/ ??
- ???? public ? void ?setNo(String?no)?{ ??
- ???????? this .no?=?no; ??
- ????} ??
- ???? /** ?
- ?????*?@return?the?addr ?
- ?????*/ ??
- ???? public ?String?getAddr()?{ ??
- ???????? return ?addr; ??
- ????} ??
- ???? /** ?
- ?????*?@param?addr?the?addr?to?set ?
- ?????*/ ??
- ???? public ? void ?setAddr(String?addr)?{ ??
- ???????? this .addr?=?addr; ??
- ????} ??
- ???? @Override ??
- ???? public ?String?toString()?{ ??
- ???????? return ? "編號:" ?+? this .no?+? ",地址:" ?+? this .addr; ??
- ????} ??
- ???? ??
- ???? ??
- }??
package com.xml.bean; public class Address { private String no; private String addr; /** * @return the no */ public String getNo() { return no; } /** * @param no the no to set */ public void setNo(String no) { this.no = no; } /** * @return the addr */ public String getAddr() { return addr; } /** * @param addr the addr to set */ public void setAddr(String addr) { this.addr = addr; } @Override public String toString() { return "編號:" + this.no + ",地址:" + this.addr; } }
?2.ReadXmlFileStream .java
- /** ?
- ?*? ?
- ?*/ ??
- package ?com.xml.bean; ??
- ??
- import ?java.io.InputStream; ??
- ??
- public ? class ?ReadXmlFileStream?{ ??
- ??
- ???? private ? static ? final ?String?XML_FILE?=? "com/xml/bean/addresses.xml" ; ??
- ??
- ???? public ? static ?InputStream?getXmlFileStream()?{ ??
- ???????? return ?Thread.currentThread().getContextClassLoader() ??
- ????????????????.getResourceAsStream(XML_FILE); ??
- ????} ??
- ??
- }??
- /** ?
- ?*? ?
- ?*/ ??
- package ?com.xml.bean; ??
- ??
- import ?java.io.InputStream; ??
- ??
- public ? class ?ReadXmlFileStream?{ ??
- ??
- ???? private ? static ? final ?String?XML_FILE?=? "com/xml/bean/addresses.xml" ; ??
- ??
- ???? public ? static ?InputStream?getXmlFileStream()?{ ??
- ???????? return ?Thread.currentThread().getContextClassLoader() ??
- ????????????????.getResourceAsStream(XML_FILE); ??
- ????} ??
- ??
- }??
/** * */ package com.xml.bean; import java.io.InputStream; public class ReadXmlFileStream { private static final String XML_FILE = "com/xml/bean/addresses.xml"; public static InputStream getXmlFileStream() { return Thread.currentThread().getContextClassLoader() .getResourceAsStream(XML_FILE); } }
?
被解析的XML結構:
addresses.xml
- <? xml ? version = "1.0" ? encoding = "UTF-8" ?> ??
- < addresses > ??
- ???? < value > ??
- ???????? < no > A100 </ no > ??
- ???????? < addr > 廣州天河區天河路 </ addr > ??
- ???? </ value > ??
- ???? < value > ??
- ???????? < no > A101 </ no > ??
- ???????? < addr > 廣州天河區五山路 </ addr > ??
- ???? </ value > ??
- </ addresses > ??
- <? xml ? version = "1.0" ? encoding = "UTF-8" ?> ??
- < addresses > ??
- ???? < value > ??
- ???????? < no > A100 </ no > ??
- ???????? < addr > 廣州天河區天河路 </ addr > ??
- ???? </ value > ??
- ???? < value > ??
- ???????? < no > A101 </ no > ??
- ???????? < addr > 廣州天河區五山路 </ addr > ??
- ???? </ value > ??
- </ addresses > ?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
