Java用SAX解析XML
生活随笔
收集整理的這篇文章主要介紹了
Java用SAX解析XML
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019獨角獸企業重金招聘Python工程師標準>>>
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?{//?存儲正在解析的元素的數據private?Map<String,?String>?map?=?null;//?存儲所有解析的元素的數據private?List<Map<String,?String>>?list?=?null;//?正在解析的元素的名字String?currentTag?=?null;//?正在解析的元素的元素值String?currentValue?=?null;//?開始解析的元素String?nodeName?=?null;public?Myhandler(String?nodeName)?{//?TODO?Auto-generated?constructor?stubthis.nodeName?=?nodeName;}public?List<Map<String,?String>>?getList()?{return?list;}//?開始解析文檔,即開始解析XML根元素時調用該方法@Overridepublic?void?startDocument()?throws?SAXException?{//?TODO?Auto-generated?method?stub//System.out.println("--startDocument()--");//?初始化Maplist?=?new?ArrayList<Map<String,?String>>();}//?開始解析每個元素時都會調用該方法@Overridepublic?void?startElement(String?uri,?String?localName,?String?qName,?Attributes?attributes)?throws?SAXException?{//?TODO?Auto-generated?method?stub//?判斷正在解析的元素是不是開始解析的元素//System.out.println("--startElement()--"?+?qName);if?(qName.equals(nodeName))?{map?=?new?HashMap<String,?String>();}//?判斷正在解析的元素是否有屬性值,如果有則將其全部取出并保存到map對象中,如:<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;?//?正在解析的元素}//?解析到每個元素的內容時會調用此方法@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);//?如果內容不為空和空格,也不是換行符則將該元素名和值和存入map中if?(currentValue?!=?null?&&?!currentValue.trim().equals("")?&&?!currentValue.trim().equals("\n"))?{map.put(currentTag,?currentValue);//System.out.println("-----"?+?currentTag?+?"?"?+?currentValue);}//?當前的元素已解析過,將其置空用于下一個元素的解析currentTag?=?null;currentValue?=?null;}}//?每個元素結束的時候都會調用該方法@Overridepublic?void?endElement(String?uri,?String?localName,?String?qName)?throws?SAXException?{//?TODO?Auto-generated?method?stub//System.out.println("--endElement()--"?+?qName);//?判斷是否為一個節點結束的元素標簽if?(qName.equals(nodeName))?{list.add(map);map?=?null;}}//?結束解析文檔,即解析根元素結束標簽時調用該方法@Overridepublic?void?endDocument()?throws?SAXException?{//?TODO?Auto-generated?method?stub//System.out.println("--endDocument()--");super.endDocument();} }SaxService
package?com.heli.xml.sax;/***?封裝解析業務類*/ 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?{//?創建一個解析XML的工廠對象SAXParserFactory?parserFactory?=?SAXParserFactory.newInstance();//?創建一個解析XML的對象SAXParser?parser?=?parserFactory.newSAXParser();//?創建一個解析助手類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>轉載于:https://my.oschina.net/ydsakyclguozi/blog/493509
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Java用SAX解析XML的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx+tomcat+php(tom
- 下一篇: tomcat 页面图片 管理 服务器 配