Java用SAX解析XML
生活随笔
收集整理的這篇文章主要介紹了
Java用SAX解析XML
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
Myhandler
package?com.heli.xml.sax;/***?用SAX解析XML的Handler*/ import?java.util.ArrayList; import?java.util.HashMap; import?java.util.List; import?java.util.Map;import?org.xml.sax.Attributes; import?org.xml.sax.SAXException; import?org.xml.sax.helpers.DefaultHandler;public?class?Myhandler?extends?DefaultHandler?{//?存儲(chǔ)正在解析的元素的數(shù)據(jù)private?Map<String,?String>?map?=?null;//?存儲(chǔ)所有解析的元素的數(shù)據(jù)private?List<Map<String,?String>>?list?=?null;//?正在解析的元素的名字String?currentTag?=?null;//?正在解析的元素的元素值String?currentValue?=?null;//?開(kāi)始解析的元素String?nodeName?=?null;public?Myhandler(String?nodeName)?{//?TODO?Auto-generated?constructor?stubthis.nodeName?=?nodeName;}public?List<Map<String,?String>>?getList()?{return?list;}//?開(kāi)始解析文檔,即開(kāi)始解析XML根元素時(shí)調(diào)用該方法@Overridepublic?void?startDocument()?throws?SAXException?{//?TODO?Auto-generated?method?stub//System.out.println("--startDocument()--");//?初始化Maplist?=?new?ArrayList<Map<String,?String>>();}//?開(kāi)始解析每個(gè)元素時(shí)都會(huì)調(diào)用該方法@Overridepublic?void?startElement(String?uri,?String?localName,?String?qName,?Attributes?attributes)?throws?SAXException?{//?TODO?Auto-generated?method?stub//?判斷正在解析的元素是不是開(kāi)始解析的元素//System.out.println("--startElement()--"?+?qName);if?(qName.equals(nodeName))?{map?=?new?HashMap<String,?String>();}//?判斷正在解析的元素是否有屬性值,如果有則將其全部取出并保存到map對(duì)象中,如:<person?id="00001"></person>if?(attributes?!=?null?&&?map?!=?null)?{for?(int?i?=?0;?i?<?attributes.getLength();?i++)?{map.put(attributes.getQName(i),?attributes.getValue(i));}}currentTag?=?qName;?//?正在解析的元素}//?解析到每個(gè)元素的內(nèi)容時(shí)會(huì)調(diào)用此方法@Overridepublic?void?characters(char[]?ch,?int?start,?int?length)?throws?SAXException?{//?TODO?Auto-generated?method?stub//System.out.println("--characters()--");if?(currentTag?!=?null?&&?map?!=?null)?{currentValue?=?new?String(ch,?start,?length);//?如果內(nèi)容不為空和空格,也不是換行符則將該元素名和值和存入map中if?(currentValue?!=?null?&&?!currentValue.trim().equals("")?&&?!currentValue.trim().equals("\n"))?{map.put(currentTag,?currentValue);//System.out.println("-----"?+?currentTag?+?"?"?+?currentValue);}//?當(dāng)前的元素已解析過(guò),將其置空用于下一個(gè)元素的解析currentTag?=?null;currentValue?=?null;}}//?每個(gè)元素結(jié)束的時(shí)候都會(huì)調(diào)用該方法@Overridepublic?void?endElement(String?uri,?String?localName,?String?qName)?throws?SAXException?{//?TODO?Auto-generated?method?stub//System.out.println("--endElement()--"?+?qName);//?判斷是否為一個(gè)節(jié)點(diǎn)結(jié)束的元素標(biāo)簽if?(qName.equals(nodeName))?{list.add(map);map?=?null;}}//?結(jié)束解析文檔,即解析根元素結(jié)束標(biāo)簽時(shí)調(diào)用該方法@Overridepublic?void?endDocument()?throws?SAXException?{//?TODO?Auto-generated?method?stub//System.out.println("--endDocument()--");super.endDocument();} }SaxService
package?com.heli.xml.sax;/***?封裝解析業(yè)務(wù)類*/ import?java.util.List; import?java.util.Map;import?javax.xml.parsers.SAXParser; import?javax.xml.parsers.SAXParserFactory;public?class?SaxService?{public?static?List<Map<String,?String>>?ReadXML(String?uri,?String?NodeName)?{try?{//?創(chuàng)建一個(gè)解析XML的工廠對(duì)象SAXParserFactory?parserFactory?=?SAXParserFactory.newInstance();//?創(chuàng)建一個(gè)解析XML的對(duì)象SAXParser?parser?=?parserFactory.newSAXParser();//?創(chuàng)建一個(gè)解析助手類Myhandler?myhandler?=?new?Myhandler("uncall");parser.parse(uri,?myhandler);return?myhandler.getList();}?catch?(Exception?e)?{e.printStackTrace();}?finally?{}return?null;} }XmlSaxTest
package?com.heli.xml.sax;/***?程序入口*/import?java.util.ArrayList; import?java.util.HashMap; import?java.util.Iterator; import?java.util.Map;public?class?XmlSaxTest?{/***?@param?args*/public?static?void?main(String[]?args)?{ArrayList<Map<String,?String>>?list?=?(ArrayList<Map<String,?String>>)?SaxService.ReadXML("e:\\test.xml",?"class");for?(int?i?=?0;?i?<?list.size();?i++)?{HashMap<String,?String>?temp?=?(HashMap<String,?String>)?list.get(i);Iterator<String>?iterator?=?temp.keySet().iterator();while?(iterator.hasNext())?{String?key?=?iterator.next().toString();String?value?=?temp.get(key);System.out.println("key:"+key?+?"--value:"?+?value?);}}System.out.println("--------------------------------------");System.out.println(list.toString());}}test.xml
<?xml?version="1.0"?encoding="utf-8"?> <uncall><result>1</result><OnClickCall><Response>success</Response><ActionID>123456</ActionID><Message>Originate?successfully?queued</Message></OnClickCall> </uncall>轉(zhuǎn)載于:https://my.oschina.net/ydsakyclguozi/blog/493509
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Java用SAX解析XML的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: nginx+tomcat+php(tom
- 下一篇: tomcat 页面图片 管理 服务器 配