SAX对XML文件进行解析

前端之家收集整理的这篇文章主要介绍了SAX对XML文件进行解析前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. package com.imooc.handler;
  2.  
  3. import java.util.ArrayList;
  4.  
  5. import org.xml.sax.Attributes;
  6. import org.xml.sax.SAXException;
  7. import org.xml.sax.helpers.DefaultHandler;
  8.  
  9. import com.imooc.entity.Book;
  10.  
  11.  
  12. public class SAXParserHandler extends DefaultHandler {
  13. String value = null;
  14. Book book = null;
  15. private ArrayList<Book> bookList = new ArrayList<Book>();
  16. public ArrayList<Book> getBookList() {
  17. return bookList;
  18. }
  19.  
  20. int bookIndex = 0;
  21. /**
  22. * 用来标识解析开始
  23. */
  24. @Override
  25. public void startDocument() throws SAXException {
  26. // TODO Auto-generated method stub
  27. super.startDocument();
  28. System.out.println("SAX解析开始");
  29. }
  30. /**
  31. * 用来标识解析结束
  32. */
  33. @Override
  34. public void endDocument() throws SAXException {
  35. // TODO Auto-generated method stub
  36. super.endDocument();
  37. System.out.println("SAX解析结束");
  38. }
  39. /**
  40. * 解析xml元素
  41. */
  42. @Override
  43. public void startElement(String uri,String localName,String qName,Attributes attributes) throws SAXException {
  44. //调用DefaultHandler类的startElement方法
  45. super.startElement(uri,localName,qName,attributes);
  46. if (qName.equals("book")) {
  47. bookIndex++;
  48. //创建一个book对象
  49. book = new Book();
  50. //开始解析book元素的属性
  51. System.out.println("======================开始遍历某一本书的内容=================");
  52. // //已知book元素下属性名称,根据属性名称获取属性
  53. // String value = attributes.getValue("id");
  54. // System.out.println("book的属性值是:" + value);
  55. //不知道book元素下属性名称以及个数,如何获取属性名以及属性
  56. int num = attributes.getLength();
  57. for(int i = 0; i < num; i++){
  58. System.out.print("book元素的第" + (i + 1) + "个属性名是:"
  59. + attributes.getQName(i));
  60. System.out.println("---属性值是:" + attributes.getValue(i));
  61. if (attributes.getQName(i).equals("id")) {
  62. book.setId(attributes.getValue(i));
  63. }
  64. }
  65. }
  66. else if (!qName.equals("name") && !qName.equals("bookstore")) {
  67. System.out.print("节点名是:" + qName + "---");
  68. }
  69. }
  70. @Override
  71. public void endElement(String uri,String qName)
  72. throws SAXException {
  73. //调用DefaultHandler类的endElement方法
  74. super.endElement(uri,qName);
  75. //判断是否针对一本书已经遍历结束
  76. if (qName.equals("book")) {
  77. bookList.add(book);
  78. book = null;
  79. System.out.println("======================结束遍历某一本书的内容=================");
  80. }
  81. else if (qName.equals("name")) {
  82. book.setName(value);
  83. }
  84. else if (qName.equals("author")) {
  85. book.setAuthor(value);
  86. }
  87. else if (qName.equals("year")) {
  88. book.setYear(value);
  89. }
  90. else if (qName.equals("price")) {
  91. book.setPrice(value);
  92. }
  93. else if (qName.equals("language")) {
  94. book.setLanguage(value);
  95. }
  96. }
  97. @Override
  98. public void characters(char[] ch,int start,int length)
  99. throws SAXException {
  100. // TODO Auto-generated method stub
  101. super.characters(ch,start,length);
  102. value = new String(ch,length);
  103. if (!value.trim().equals("")) {
  104. System.out.println("节点值是:" + value);
  105. }
  106. }
  107. }
  1. package com.imooc.entity;
  2.  
  3. public class Book {
  4. private String id;
  5. private String name;
  6. private String author;
  7. private String year;
  8. private String price;
  9. private String language;
  10. public String getId() {
  11. return id;
  12. }
  13. public void setId(String id) {
  14. this.id = id;
  15. }
  16. public String getName() {
  17. return name;
  18. }
  19. public void setName(String name) {
  20. this.name = name;
  21. }
  22. public String getAuthor() {
  23. return author;
  24. }
  25. public void setAuthor(String author) {
  26. this.author = author;
  27. }
  28. public String getYear() {
  29. return year;
  30. }
  31. public void setYear(String year) {
  32. this.year = year;
  33. }
  34. public String getPrice() {
  35. return price;
  36. }
  37. public void setPrice(String price) {
  38. this.price = price;
  39. }
  40. public String getLanguage() {
  41. return language;
  42. }
  43. public void setLanguage(String language) {
  44. this.language = language;
  45. }
  46. }
  1. package com.imooc.entity;
  2.  
  3. public class Book {
  4. private String id;
  5. private String name;
  6. private String author;
  7. private String year;
  8. private String price;
  9. private String language;
  10. public String getId() {
  11. return id;
  12. }
  13. public void setId(String id) {
  14. this.id = id;
  15. }
  16. public String getName() {
  17. return name;
  18. }
  19. public void setName(String name) {
  20. this.name = name;
  21. }
  22. public String getAuthor() {
  23. return author;
  24. }
  25. public void setAuthor(String author) {
  26. this.author = author;
  27. }
  28. public String getYear() {
  29. return year;
  30. }
  31. public void setYear(String year) {
  32. this.year = year;
  33. }
  34. public String getPrice() {
  35. return price;
  36. }
  37. public void setPrice(String price) {
  38. this.price = price;
  39. }
  40. public String getLanguage() {
  41. return language;
  42. }
  43. public void setLanguage(String language) {
  44. this.language = language;
  45. }
  46. }
  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. -<bookstore>
  4.  
  5.  
  6. -<book id="1">
  7.  
  8. <name>冰与火之歌</name>
  9.  
  10. <author>乔治马丁</author>
  11.  
  12. <year>2014</year>
  13.  
  14. <price>89</price>
  15.  
  16. </book>
  17.  
  18.  
  19. -<book id="2">
  20.  
  21. <name>安徒生童话</name>
  22.  
  23. <year>2004</year>
  24.  
  25. <price>77</price>
  26.  
  27. <language>English</language>
  28.  
  29. </book>
  30.  
  31. </bookstore>

还没有总结,最近有点忙,大2了,很多事情由不得自己了

猜你在找的XML相关文章