JAVA解析XML文件(二)---SAX方式解析
2015-11-22 19:22
417 查看
JAVA解析XML文件(二)—SAX方式解析
1.XML文件内容:
2.JAVA代码:
(1)新建一个类对Handler方法重写
(2)新建SAX解析方法进行解析
(3)main()方法调用
1.XML文件内容:
<?xml version="1.0" encoding="UTF-8"?> <bookstore> <book id="1"> <name>冰与火之歌</name> <author>乔治·马丁</author> <year>2015</year> <price>200</price> </book> <book id="2"> <name>光荣与梦想</name> <year>2004</year> <price>150</price> <publish>科学出版社</publish> </book> </bookstore>
2.JAVA代码:
(1)新建一个类对Handler方法重写
public class SAXParserHandler extends DefaultHandler { int bookIndex = 0; String value = null; Book book = null; private ArrayList<Book> bookList = new ArrayList<Book>(); public ArrayList<Book> getBookList() { return bookList; } /** * 用来标示解析开始 */ @Override public void startDocument() throws SAXException { // TODO Auto-generated method stub super.startDocument(); System.out.println("解析开始"); } /** * 用来标示解析结束 */ @Override public void endDocument() throws SAXException { // TODO Auto-generated method stub super.endDocument(); System.out.println("解析完成"); } /** * 用于遍历xml的开始标签 */ @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // TODO Auto-generated method stub super.startElement(uri, localName, qName, attributes); if (qName.equals("book")) { bookList.add(book); book = null; bookIndex++; // 创建一个Book对象,用来接收解析到的元素和节点 book = new Book(); System.out.println("================开始遍历第" + bookIndex + "本书的内容================="); // //已知book标签有有一个属性为id时,调用getValue方法即可 // String value = attributes.getValue("id"); // System.out.println("book标签的属性值为:"+ value); // 不知道book标签的属性及个数时,可通过索引遍历,方法如下 int num = attributes.getLength(); System.out.println("book标签共有" + num + "个属性:"); for (int i = 0; i < num; i++) { // 通过遍历索引来获取属性的名称和值 System.out.print("第" + (i + 1) + "个属性的名称是:" + attributes.getQName(i)); System.out.println("--->它的属性值是:" + attributes.getValue(i)); // 将获取的属性值赋给book对象中的id属性 if (attributes.getQName(i).equals("id")) { book.setId(attributes.getValue(i)); } } } else if (!(qName.equals("book") || qName.equals("bookstore"))) { // 获取节点名 System.out.print("节点名是:" + qName); // 将获取到的节点属性值赋给相应的节点 } } /** * 用于遍历xml的结束标签 */ @Override public void endElement(String uri, String localName, String qName) throws SAXException { // TODO Auto-generated method stub super.endElement(uri, localName, qName); if (qName.equals("book")) { book = null; System.out.println("================结束遍历第" + book 4000 Index + "本书的内容================="); } else if (qName.equals("")) { System.out.println("出错了,写的什么屎玩意儿!!!"); } else if (qName.equals("name")) { book.setName(value); // System.out.println("名称已写入"+book.getName()); } else if (qName.equals("author")) { book.setAuthor(value); } else if (qName.equals("year")) { book.setYear(value); } else if (qName.equals("price")) { book.setPrice(value); } else if (qName.equals("publish")) { book.setPublish(value); } } /** * 用于获取节点的值 */ @Override public void characters(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub super.characters(ch, start, length); // 获取节点值 value = new String(ch, start, length); if (!value.trim().equals("")) { System.out.println("--->它的值是:" + value); } }
(2)新建SAX解析方法进行解析
public ArrayList<Book> SAXParseXML() { // 通过SAXParserFactory的newInstance方法创建一个实例 SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParserHandler handler = null; try { // 通过factory的newSAXParser方法创建一个SAXParser实例 SAXParser parser = factory.newSAXParser(); // 创建一个SAXParserHandler对象,SAXParserHandler类继承自DefaultHandler,里边重载了一些方法 handler = new SAXParserHandler(); // 通过parser的parse方法解析目标xml文件 parser.parse("MyXML.xml", handler); return handler.getBookList(); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return handler.getBookList(); }
(3)main()方法调用
public static void main(String[] args) { SAXTest st = new SAXTest(); st.SAXParseXML(); }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树