SAX解析XML-说明及示例代码

前端之家收集整理的这篇文章主要介绍了SAX解析XML-说明及示例代码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

SAX解析XML

SAX是一个用于处理XML事件驱动的“推”模型,虽然它不是W3C标准,但它却是一个得到了广泛认可的API。SAX解析器不像DOM那样建立一个完整的文档树,而是在读取文档时激活一系列事件,这些事件被推给事件处理器,然后由事件处理器提供对文档内容的访问。


SAL解析xml文件步骤
1. 创建SAX解析器工厂对象
2. 通过解析器工厂对象获取解析器对象
3. 通过解析器对象获取reader读取器
4. 设置reader事件处理器
5. 利用reader读取xml文件


下面是用SAX解析studeng.xml文件事例代码

  1. package SAX;
  2.  
  3. import java.io.StreamCorruptedException;
  4. import java.util.ArrayList;
  5.  
  6. import javax.xml.parsers.SAXParser;
  7. import javax.xml.parsers.SAXParserFactory;
  8.  
  9. import org.xml.sax.Attributes;
  10. import org.xml.sax.SAXException;
  11. import org.xml.sax.XMLReader;
  12. import org.xml.sax.helpers.DefaultHandler;
  13.  
  14. public class SAXDemo02 {
  15.  
  16. /** * 使用Sax方法解析students.xml文件,保存到集合中 * @param args */
  17. public static void main(String[] args) throws Exception{
  18. //1.创建工厂 SAX分析工厂
  19. SAXParserFactory factory = SAXParserFactory.newInstance();
  20.  
  21. //2.创建解释器
  22. SAXParser parser = factory.newSAXParser();
  23.  
  24. //3.从解释器获取读取器
  25. XMLReader reader = parser.getXMLReader();
  26. StudentContentHandler2 studentContentHandler2 = new StudentContentHandler2();
  27. //4.设置内容处理器
  28. reader.setContentHandler(studentContentHandler2);
  29.  
  30. //5.解析
  31. reader.parse("xml\\student.xml");
  32.  
  33. for(Student s:studentContentHandler2.getList()){
  34. System.out.println(s.getId()+"--"+s.getName()+"--"+s.getAge()+"--"+s.getSex());
  35. }
  36. }
  37. }
  38.  
  39. class StudentContentHandler2 extends DefaultHandler{
  40. ArrayList<Student> list =new ArrayList<Student>();
  41. String currentTagName;
  42. Student student = null;
  43.  
  44. public ArrayList<Student> getList() {
  45. return list;
  46. }
  47. public void setList(ArrayList<Student> list) {
  48. this.list = list;
  49. }
  50. public String getCurrentTagName() {
  51. return currentTagName;
  52. }
  53. public void setCurrentTagName(String currentTagName) {
  54. this.currentTagName = currentTagName;
  55. }
  56. public Student getStudent() {
  57. return student;
  58. }
  59. public void setStudent(Student student) {
  60. this.student = student;
  61. }
  62. //内容处理器开始标签
  63. @Override
  64. public void startElement(String uri,String localName,String qName,Attributes attributes) throws SAXException {
  65.  
  66. currentTagName = qName;
  67. if(qName.equals("student")){
  68. student = new Student();
  69.  
  70. }
  71. }
  72. //内容处理器 结束标签
  73. @Override
  74. public void endElement(String uri,String qName)
  75. throws SAXException {
  76. currentTagName = "";
  77. if(qName.equals("student")){
  78. list.add(student);
  79. }
  80.  
  81. }
  82. //内容处理 处理内容标签
  83. @Override
  84. public void characters(char[] ch,int start,int length)
  85. throws SAXException {
  86.  
  87. if(currentTagName.equals("name")){
  88. student.setName(new String(ch,start,length));
  89. }else if(currentTagName.equals("age")){
  90. student.setAge(Integer.parseInt(new String(ch,length)));
  91. }else if(currentTagName.equals("sex")){
  92. student.setSex(new String(ch,length));
  93. }else if(currentTagName.equals("id")){
  94. student.setId(Integer.parseInt(new String(ch,length)));
  95. }
  96.  
  97. }
  98.  
  99.  
  100. }
  101.  
  102. class Student{
  103. private int id;
  104. private String name;
  105. private int age;
  106. private String sex;
  107. public Student() {
  108. super();
  109. // TODO Auto-generated constructor stub
  110. }
  111. public Student(int id,String name,int age,String sex) {
  112. super();
  113. this.id = id;
  114. this.name = name;
  115. this.age = age;
  116. this.sex = sex;
  117. }
  118. public int getId() {
  119. return id;
  120. }
  121. public void setId(int id) {
  122. this.id = id;
  123. }
  124. public String getName() {
  125. return name;
  126. }
  127. public void setName(String name) {
  128. this.name = name;
  129. }
  130. public int getAge() {
  131. return age;
  132. }
  133. public void setAge(int age) {
  134. this.age = age;
  135. }
  136. public String getSex() {
  137. return sex;
  138. }
  139. public void setSex(String sex) {
  140. this.sex = sex;
  141. }
  142.  
  143. }

studeng.xml文件内容


  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <students>
  3. <student>
  4. <id>1</id>
  5. <name>zhangsan</name>
  6. <age>20</age>
  7. <sex>male</sex>
  8. </student>
  9. <student>
  10. <id>2</id>
  11. <name>lisi</name>
  12. <age>21</age>
  13. <sex>female</sex>
  14. </student>
  15. </students>

猜你在找的XML相关文章