XML文档解析之SAX解析
来源:互联网 发布:js正则查找字符串 编辑:程序博客网 时间:2024/06/03 16:44
解析步骤
Java SAX解析是按照xml文件的顺序一步一步的来解析。步骤如下:
1. 创建SAXParserFactory实例factory;
2. 通过factory获取SAXParser实例;
3. 创建一个继承DefaultHandler类的解析类,重写其中的方法进行业务处理并创建这个类的实例;
4. 将xml文件和解析类实例对象传给SAXParser的parse方法进行解析。
DefaultHandler覆写的方法说明
textNode节点:如下图蓝色的空白部分、冰与火之歌等属于textNode,所以在
待解析xml文件,
<?xml version="1.0" encoding="UTF-8" ?><bookstore> <book id = "1"> <name>冰与火之歌</name> <author>乔治马丁</author> <year>2014</year> <price>89</price> </book> <book id = "2"> <name>安徒生童话</name> <year>2004</year> <price>77</price> <language>English</language> </book></bookstore>
book结构
package XML;/** * Created by lin_y on 2017/6/18. */public class Book { private String id; public String getId() { return id; } public void setId(String id) { this.id = id; } private String name; private String author; private String year; private double price; private String language; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getYear() { return year; } public void setYear(String year) { this.year = year; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public String getLanguage() { return language; } public void setLanguage(String language) { this.language = language; } @Override public String toString() { return "Book{" + "id='" + id + '\'' + ", name='" + name + '\'' + ", author='" + author + '\'' + ", year='" + year + '\'' + ", price=" + price + ", language='" + language + '\'' + '}'; }}
解析代码
SAXParserHandler类
package XML;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;import java.util.ArrayList;import java.util.List;/** * Created by lin_y on 2017/6/18. */public class SAXParserHandler extends DefaultHandler { public String value; public Book book = null; public List<Book> list = new ArrayList<Book>(); @Override // 标识解析开始 public void startDocument() throws SAXException { super.startDocument(); System.out.println("解析开始"); } @Override // 标识解析结束 public void endDocument() throws SAXException { super.endDocument(); System.out.println("解析结束"); } @Override // 遍历XML文件开始标签 public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes); if(qName.equals("book")){ book = new Book(); // book标签下属性的个数 int len = attributes.getLength(); for(int i = 0; i < len; i ++){ // 获取属性名 String attrName = attributes.getQName(i); // 获取属性值 String attrValue = attributes.getValue(i); if(attrName.equals("id")){ book.setId(attrValue); } } } } @Override // 遍历XML文件结束标签 public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); if(!qName.equals("book")){ switch(qName){ case "name": book.setName(value); break; case "author": book.setAuthor(value); break; case "year": book.setYear(value); break; case "price": book.setPrice(Double.parseDouble(value)); break; case "language": book.setLanguage(value); break; } }else{ list.add(book); } } @Override // 获取对应属性名的属性值 public void characters(char[] ch, int start, int length) throws SAXException { super.characters(ch, start, length); String temp = new String(ch, start, length); if(!temp.trim().equals("")){ value = temp; } }}
主类
package XML;import org.xml.sax.SAXException;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;/** * Created by lin_y on 2017/6/18. */public class XMLSAX { public static void main(String [] args) throws Exception { // 1. 创建SAXParserFactory实例 SAXParserFactory factory = SAXParserFactory.newInstance(); // 2. 通过factory获取AXParser实例 SAXParser parser = factory.newSAXParser(); // 3. 创建一个类继承DefaultHandler类,重写其中的方法进行业务 // 处理并创建这个类的实例 SAXParserHandler handler = new SAXParserHandler(); parser.parse("xml/book.xml", handler); for(Book book : handler.list){ System.out.println(book); } }}
程序运行结果
阅读全文
0 0
- Java解析xml文档之SAX解析
- XML文档解析之SAX解析
- SAX解析XML文档
- SAX解析xml文档
- SAX解析XML文档
- SAX解析xml文档
- SAX解析xml文档
- SAX解析XML文档
- SAX解析XML文档
- SAX解析XML文档
- SAX解析XML文档
- SAX解析XML文档
- sax解析xml文档
- SAX解析XML文档
- Sax解析Xml文档
- Sax解析XML文档
- SAX解析XML文档
- SAX解析xml文档
- tomcat远程监控
- 88. Merge Sorted Array
- 【c++】c++的基础知识
- android studio导包找不到类
- iOS 自定义view 如何不使用self.view也就是系统自带的 view,使用自己定制的view
- XML文档解析之SAX解析
- MFC生成的exe如何添加使用期限
- tensorflow cpu版本安装
- 风花雪月·《基层风云·1》·四
- MobLink | URL Scheme和Universal Link的区别
- 2017年前端框架、类库、工具大比拼
- intellij idea开发工具
- Python高级编程笔记(一)-- Linux下python命令行tab键自动补全功能设置
- 73_异常机制_常见异常分类_异常简单处理