使用SAX解析将xml的文件保存为java对象
2018-01-12 13:48
543 查看
在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=第三
版]
相关文章推荐
- 使用SAX解析将xml的文件内容结构保存到java对象中
- 【JavaWeb】XML文件_使用SAX解析将xml文件中的联系人封装为对象
- 使用Digester解析XML文件和JAVA对象的映射
- java使用jdom架包解析xml字符串dom原理并保存map对象
- Java对象与XML文件互转的几个小技巧(使用jaxb工具类)
- 把java对象转化成xml文件保存
- 【慕课笔记】3-4 应用SAX方式解析XML—使用SAX解析将XML的内容和结构存入JAVA对象
- apache commons JXPath 说明,使用JXPath访问java对象、集合和XML文件
- 使用 XStream 把 Java 对象序列化为 XML
- 使用 XStream 把 Java 对象序列化为 XML
- java中使用dom4j读xml文件简单教程
- 使用Java序列化把对象存储到文件中,再从文件中读出来
- Java通过http访问网页及xml及文件并保存到local
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- java序列化之保存对象到文件中
- 使用XStream把Java 对象序列化为XML!!!
- java中使用dom4j写xml文件和简单教程
- 使用XStream把Java对象序列化为XML
- 合理使用DataSet和DataGridView读取xml文件到DataGridView;保存DataGridView到xml文件
- 使用 Hibernate 将 Java 对象持久保存到 IBM DB2 通用数据库中