您的位置:首页 > 编程语言 > Java开发

使用SAX解析将xml的文件保存为java对象

2018-01-12 13:48 543 查看



转载自:http://blog.csdn.net/kingsonyoung/article/details/5199508

Java使用Sax解析xml文件中,我们介绍了如何用SAX解析xml文件,接下来我们继续学习如何将一个xml文件的内容结构保存到一个java实例对象中

一、xml文件如下

[html] view
plain copy

<?xml version="1.0" encoding="UTF-8"?>  

<bookstore>  

    <book id="156">  

        <name>计算机网络</name>  

        <author>谢希仁</author>  

        <price>39</price>  

        <year>2013</year>  

    </book>  

    <book id="234">  

        <name>计算机操作系统</name>  

        <author>佚名</author>  

        <price>40</price>  

        <year>2013</year>  

        <edition>第四版</edition>  

    </book>  

    <book id="367">  

        <name>计算机组成原理</name>  

        <price>35</price>  

        <year>2013</year>  

        <edition>第三版</edition>  

    </book>  

</bookstore>  

二、首先,我们要想写一个与xml中的book节点结构相同的实体类Book

[java] view
plain copy

public class Book {  

    private String id;  

    private String name;  

    private String author;  

    private String price;  

    private String year;  

    private String edition;  

  

    public String getId() {  

        return id;  

    }  

  

    public void setId(String id) {  

        this.id = id;  

    }  

  

    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 getPrice() {  

        return price;  

    }  

  

    public void setPrice(String price) {  

        this.price = price;  

    }  

  

    public String getYear() {  

        return year;  

    }  

  

    public void setYear(String year) {  

        this.year = year;  

    }  

  

    public String getEdition() {  

        return edition;  

    }  

  

    public void setEdition(String edition) {  

        this.edition = edition;  

    }  

  

    @Override  

    public String toString() {  

        return "Book [id=" + id + ", name=" + name + ", author=" + author + ", price=" + price + ", year=" + year  

                + ", edition=" + edition + "]";  

    }  

  

}  

三、编写DefaultHandler类

使用全局变量来实现不同函数之间的对象共享

[java] view
plain copy

public class MyHandler extends DefaultHandler {  

    private String value = null;  

    private List<Book> bookList = new ArrayList<>();  

    private Book book = null;  

  

    @Override  

    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {  

        super.startElement(uri, localName, qName, attributes);  

        if ("book".equals(qName)) {  

            book = new Book();  

            String id = attributes.getValue("id");  

            book.setId(id);  

        }  

    }  

  

    @Override  

    public void characters(char[] ch, int start, int length) throws SAXException {  

        super.characters(ch, start, length);  

        value = new String(ch, start, length);  

  

    }  

  

    @Override  

    public void endElement(String uri, String localName, String qName) throws SAXException {  

        super.endElement(uri, localName, qName);  

        switch (qName) {  

        case "book":  

            bookList.add(book);  

            book = null;  

            break;  

        case "name":  

            book.setName(value);  

            break;  

        case "author":  

            book.setAuthor(value);  

        case "year":  

            book.setYear(value);  

            break;  

        case "edition":  

            book.setEdition(<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">value</span><span style="font-size: 12px; font-family: Arial, Helvetica, sans-serif;">);</span>  

            break;  

        case "price":  

            book.setPrice(value);  

            break;  

        }  

    }  

  

    public List<Book> getBookList() {  

        return bookList;  

    }  

  

    public void setBookList(List<Book> bookList) {  

        this.bookList = bookList;  

    }  

  

}  

四、编写主函数

[java] view
plain copy

public class SaxXmlParser {  

    public static void main(String[] args) {  

        // 创建SAXParserFactory实例  

        SAXParserFactory spf = SAXParserFactory.newInstance();  

        try {  

            // 创建SAXParser实例  

            SAXParser parser = spf.newSAXParser();  

            // 创建DefaultHandler实例  

            MyHandler handler = new MyHandler();  

            // 开始解析  

            parser.parse("book.xml", handler);  

            for (Book book : handler.getBookList()) {  

                System.out.println(book);  

            }  

        } catch (ParserConfigurationException | SAXException e) {  

            // TODO Auto-generated catch block  

            e.printStackTrace();  

        } catch (IOException e) {  

            // TODO Auto-generated catch block  

            e.printStackTrace();  

        }  

    }  

}  

五、控制台输出结果如下

[plain] view
plain copy

Book [id=156, name=计算机网络, author=谢希仁, price=39, year=2013, edition=null]  

Book [id=234, name=计算机操作系统, author=佚名, price=40, year=2013, edition=第四版]  

Book [id=367, name=计算机组成原理, author=null, price=35, year=2013, edition=第三

版]  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐