前端之家收集整理的这篇文章主要介绍了
慕课网——SAX解析XML,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
//这是Test
public class SAXTest {
public static void main(String[] args) {
// 获取一个SAXParserFactory的实例
SAXParserFactory factory = SAXParserFactory.newInstance();
// 通过factory获取SAXParser实例
try {
SAXParser parser = factory.newSAXParser();
// 创建SAXParserHandler对象
SAXParserHandler handler = new SAXParserHandler();
parser.parse("books.xml",handler);
System.out.println("共有" + handler.getBookList().size() + "本书");
for (Book book : handler.getBookList()) {
System.out.println(book.getId());
System.out.println(book.getName());
System.out.println(book.getAuthor());
System.out.println(book.getYear());
System.out.println(book.getPrice());
System.out.println(book.getLanguage());
System.out.println("--------完成----------");
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
<pre name="code" class="java">//这是Handler
//这里继承这个包:org.xml.sax.helpers.DefaultHandler
public class SAXParserHandler extends DefaultHandler {
int bookIndex = 0;
// 为了方便方法之间调用参数,将value做成全局变量
String value = null;
// 为了方便方法之间调用参数,将book做成全局变量
Book book = null;
//为了防止每次都会覆盖掉book中的内容,这里定义一个ArrayList存储
ArrayList<Book> bookList = new ArrayList<Book>();
public ArrayList<Book> getBookList() {
return bookList;
}
/**
* 用来表示解析开始
*/
public void startDocument() throws SAXException {
super.startDocument();
System.out.println("SAX解析开始");
}
/**
* 用来表示解析开始
*/
public void endDocument() throws SAXException {
super.endDocument();
System.out.println("SAX解析结束");
}
/**
* 用来遍历xml文件的开始标签
*/
public void startElement(String uri,String localName,String qName,Attributes attributes) throws SAXException {
// 调用DefaultElement类的startElement方法
super.startElement(uri,localName,qName,attributes);
// 开始解析book元素的属性
if (qName.equals("book")) {
// 为了将解析的内容存入book对象中
book = new Book();
// Book book = new Book();
bookIndex++;
System.out.println("=============开始" + bookIndex
+ "书内容的============");
/**
* 已知属性名称,根据属性名称获取属性值 String value = attributes.getValue("id");
* System.out.println("book的属性值是: " + value);
*/
// 若不知道属性名称,做成循环遍历
int num = attributes.getLength();
for (int i = 0; i < num; i++) {
System.out.print("book元素的" + (i + 1) + "个属性名是: "
+ attributes.getQName(i));
System.out.println("----属性值是: " + attributes.getValue(i));
if (attributes.getQName(i).equals("id")) {
book.setId(attributes.getValue(i));
}
}
} else if (!qName.equals("book") && !qName.equals("bookstore")) {
System.out.println("节点名是: " + qName);
}
}
/**
* 用来遍历xml文件的结束标签
*/
// qName决定了是遍历当中的setId、setElement还是setAuthor
public void endElement(String uri,String qName)
throws SAXException {
// 调用DefaultHandler类的endElement方法
super.endElement(uri,qName);
// 判断是否针对一本书已经遍历结束
if (qName.equals("book")) {
bookList.add(book);
//在遍历下一本书之前,清空book
book = null;
System.out.println("=============结束" + bookIndex
+ "书内容的============");
} else if (qName.equals("name")) {
book.setName(value);
} 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("language")) {
book.setLanguage(value);
}
}
// ch指的是整个xml文档内容,start指的是开始节点,length指的是元素长
// 同样这里的空行也会作为需要解析的text
public void characters(char[] ch,int start,int length)
throws SAXException {
super.characters(ch,start,length);
// String value = new String(ch,length);
// 为了方便方法之间调用参数,将value做成全局变量
value = new String(ch,length);
if (!value.trim().equals("")) {
System.out.println("节点值是: " + value);
}
}
}
<pre name="code" class="java">//这是Book
public class Book {
private String id;
private String name;
private String author;
private String year;
private String price;
private String language;
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 getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
}