Sax读取XML文件

前端之家收集整理的这篇文章主要介绍了Sax读取XML文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

ReadXmlUtil.java

  1. packageorg.apache.list.util;
  2.  
  3. importjava.io.File;
  4. importjava.io.FileInputStream;
  5. importjava.io.FileNotFoundException;
  6. importjava.io.IOException;
  7. importjava.util.HashMap;
  8. importjava.util.List;
  9.  
  10. importjavax.xml.parsers.ParserConfigurationException;
  11. importjavax.xml.parsers.SAXParser;
  12. importjavax.xml.parsers.SAXParserFactory;
  13.  
  14. importorg.xml.sax.SAXException;
  15. publicclassReadXmlUtil{
  16. /**
  17. *匹配文件
  18. */
  19. privatestaticfinalStringFILE_TYPE="xml";
  20.  
  21. /**
  22. *用Sax读取xml文件
  23. *
  24. *@paramfileName
  25. *文件
  26. *@paramnodeName
  27. *标示符
  28. *@return
  29. *读取的内容
  30. *@throwsException
  31. */
  32. publicstaticList<HashMap<String,String>>readXmlInfo(StringfileName,StringnodeName)
  33. throwsException{
  34.  
  35. //文件为空的情况下
  36. if(fileName==null||fileName.length()==0){
  37. returnnull;
  38. }
  39.  
  40. //不是XML文件的情况下
  41. if(!fileName.endsWith(FILE_TYPE)){
  42. returnnull;
  43. }
  44.  
  45. //文件是否存在和文件夹判断
  46. FilefileInfo=newFile(fileName);
  47. if(!fileInfo.exists()){
  48. returnnull;
  49. }
  50. if(fileInfo.isDirectory()){
  51. returnnull;
  52. }
  53.  
  54. //获得文件输入流
  55. FileInputStreamfs=newFileInputStream(newFile(fileName));
  56.  
  57. try{
  58. SAXParserFactoryspf=SAXParserFactory.newInstance();
  59. SAXParserparser=spf.newSAXParser();
  60. SaxHandlerhandler=newSaxHandler(nodeName);
  61. parser.parse(fs,handler);
  62. fs.close();
  63. returnhandler.getList();
  64. }catch(ParserConfigurationExceptione){
  65. //TODOAuto-generatedcatchblock
  66. e.printStackTrace();
  67. }catch(SAXExceptione){
  68. //TODOAuto-generatedcatchblock
  69. e.printStackTrace();
  70. }catch(IOExceptione){
  71. //TODOAuto-generatedcatchblock
  72. e.printStackTrace();
  73. }
  74. returnnull;
  75. }
  76.  
  77. publicstaticvoidmain(String[]args)throwsException{
  78. try{
  79. List<HashMap<String,String>>list=readXmlInfo("src/itcast.xml","person");
  80. for(HashMap<String,String>p:list){
  81. System.out.println(p.toString());
  82. }
  83. }catch(FileNotFoundExceptione){
  84. //TODOAuto-generatedcatchblock
  85. e.printStackTrace();
  86. }
  87. }
  88. }

SaxHandler.java

  1. packageorg.apache.list.util;
  2.  
  3. importjava.util.ArrayList;
  4. importjava.util.HashMap;
  5. importjava.util.List;
  6.  
  7. importorg.xml.sax.Attributes;
  8. importorg.xml.sax.SAXException;
  9. importorg.xml.sax.helpers.DefaultHandler;
  10.  
  11. publicclassSaxHandlerextendsDefaultHandler{
  12. /**
  13. *三级标签
  14. */
  15. privateHashMap<String,String>map=null;
  16. /**
  17. *二级标签
  18. */
  19. privateList<HashMap<String,String>>list=null;
  20. /**
  21. *正在解析的元素的标签
  22. */
  23. privateStringcurrentTag=null;
  24. /**
  25. *正在解析的元素的值
  26. */
  27. privateStringcurrentValue=null;
  28.  
  29. privateStringnodeName=null;
  30.  
  31. publicList<HashMap<String,String>>getList(){
  32. returnlist;
  33. }
  34.  
  35. publicSaxHandler(StringnodeName){
  36. this.nodeName=nodeName;
  37. }
  38.  
  39. /**
  40. *当读到一个开始标签的时候,会触发这个方法
  41. */
  42. publicvoidstartDocument()throwsSAXException{
  43. list=newArrayList<HashMap<String,String>>();
  44. }
  45.  
  46. /**
  47. *当遇到文档的开头的时候,调用这个方法
  48. */
  49. publicvoidstartElement(Stringuri,StringlocalName,Stringname,Attributesattributes)
  50. throwsSAXException{
  51. if(name.equals(nodeName)){
  52. map=newHashMap<String,String>();
  53. }
  54. if(attributes!=null&&map!=null){
  55. for(inti=0;i<attributes.getLength();i++){
  56. map.put(attributes.getQName(i),attributes.getValue(i));
  57. }
  58. }
  59. currentTag=name;
  60. }
  61.  
  62. /**
  63. *这个方法用来处理在XML文件中读到的内容
  64. */
  65. publicvoidcharacters(char[]ch,intstart,intlength)throwsSAXException{
  66. if(currentTag!=null&&map!=null){
  67. currentValue=newString(ch,start,length);
  68. if(currentValue!=null&&!currentValue.trim().equals("")
  69. &&!currentValue.trim().equals("\n")){
  70. map.put(currentTag,currentValue);
  71. }
  72. }
  73. currentTag=null;
  74. currentValue=null;
  75. }
  76.  
  77. /**
  78. *在遇到结束标签的时候,调用这个方法
  79. */
  80. publicvoidendElement(Stringuri,Stringname)throwsSAXException{
  81. if(name.equals(nodeName)){
  82. list.add(map);
  83. map=null;
  84. }
  85. super.endElement(uri,localName,name);
  86. }
  87.  
  88. }

itcast.xml

  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <persons>
  3. <personid="23">
  4. <name>zhangsan</name>
  5. <age>30</age>
  6. </person>
  7. <personid="20">
  8. <name>lisi</name>
  9. <age>25</age>
  10. </person>
  11. </persons>

猜你在找的XML相关文章