ReadXmlUtil.java
packageorg.apache.list.util; importjava.io.File; importjava.io.FileInputStream; importjava.io.FileNotFoundException; importjava.io.IOException; importjava.util.HashMap; importjava.util.List; importjavax.xml.parsers.ParserConfigurationException; importjavax.xml.parsers.SAXParser; importjavax.xml.parsers.SAXParserFactory; importorg.xml.sax.SAXException; publicclassReadXmlUtil{ /** *匹配文件 */ privatestaticfinalStringFILE_TYPE="xml"; /** *用Sax读取xml文件 * *@paramfileName *文件名 *@paramnodeName *标示符 *@return *读取的内容 *@throwsException */ publicstaticList<HashMap<String,String>>readXmlInfo(StringfileName,StringnodeName) throwsException{ //文件为空的情况下 if(fileName==null||fileName.length()==0){ returnnull; } //不是XML文件的情况下 if(!fileName.endsWith(FILE_TYPE)){ returnnull; } //文件是否存在和文件夹判断 FilefileInfo=newFile(fileName); if(!fileInfo.exists()){ returnnull; } if(fileInfo.isDirectory()){ returnnull; } //获得文件输入流 FileInputStreamfs=newFileInputStream(newFile(fileName)); try{ SAXParserFactoryspf=SAXParserFactory.newInstance(); SAXParserparser=spf.newSAXParser(); SaxHandlerhandler=newSaxHandler(nodeName); parser.parse(fs,handler); fs.close(); returnhandler.getList(); }catch(ParserConfigurationExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(SAXExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } returnnull; } publicstaticvoidmain(String[]args)throwsException{ try{ List<HashMap<String,String>>list=readXmlInfo("src/itcast.xml","person"); for(HashMap<String,String>p:list){ System.out.println(p.toString()); } }catch(FileNotFoundExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } }
SaxHandler.java
packageorg.apache.list.util; importjava.util.ArrayList; importjava.util.HashMap; importjava.util.List; importorg.xml.sax.Attributes; importorg.xml.sax.SAXException; importorg.xml.sax.helpers.DefaultHandler; publicclassSaxHandlerextendsDefaultHandler{ /** *三级标签 */ privateHashMap<String,String>map=null; /** *二级标签 */ privateList<HashMap<String,String>>list=null; /** *正在解析的元素的标签 */ privateStringcurrentTag=null; /** *正在解析的元素的值 */ privateStringcurrentValue=null; privateStringnodeName=null; publicList<HashMap<String,String>>getList(){ returnlist; } publicSaxHandler(StringnodeName){ this.nodeName=nodeName; } /** *当读到一个开始标签的时候,会触发这个方法 */ publicvoidstartDocument()throwsSAXException{ list=newArrayList<HashMap<String,String>>(); } /** *当遇到文档的开头的时候,调用这个方法 */ publicvoidstartElement(Stringuri,StringlocalName,Stringname,Attributesattributes) throwsSAXException{ if(name.equals(nodeName)){ map=newHashMap<String,String>(); } if(attributes!=null&&map!=null){ for(inti=0;i<attributes.getLength();i++){ map.put(attributes.getQName(i),attributes.getValue(i)); } } currentTag=name; } /** *这个方法用来处理在XML文件中读到的内容 */ publicvoidcharacters(char[]ch,intstart,intlength)throwsSAXException{ if(currentTag!=null&&map!=null){ currentValue=newString(ch,start,length); if(currentValue!=null&&!currentValue.trim().equals("") &&!currentValue.trim().equals("\n")){ map.put(currentTag,currentValue); } } currentTag=null; currentValue=null; } /** *在遇到结束标签的时候,调用这个方法 */ publicvoidendElement(Stringuri,Stringname)throwsSAXException{ if(name.equals(nodeName)){ list.add(map); map=null; } super.endElement(uri,localName,name); } }
itcast.xml
<?xmlversion="1.0"encoding="UTF-8"?> <persons> <personid="23"> <name>zhangsan</name> <age>30</age> </person> <personid="20"> <name>lisi</name> <age>25</age> </person> </persons>