SAX解析文件

时间:2023-03-09 06:36:20
SAX解析文件
  import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
/**
* 1.新建一个SAX解析工厂实例
* 2.new一个解析器
* 3.new一个解析处理器
* 4.解析文件
* 5.获取信息
* @author Administrator
*
*/
public class SAXParserDemo { public static void main(String[] args) {
SAXParserFactory factory = SAXParserFactory.newInstance();// 工厂模式,单例模式
try {
/* 获得一个sax解析器 */
SAXParser parser = factory.newSAXParser();
/* 解析器解析这个文件,new一个解析处理器 */
SAXParserHandler sax = new SAXParserHandler();
parser.parse("books.xml", sax);
System.out.println("几本书:" + sax.booklist.size()); for (Book book : sax.booklist) {
System.out.println(book.getId());
System.out.println(book.getName());
System.out.println(book.getPrice());
System.out.println(book.getAuthor()); } } catch (ParserConfigurationException e) { e.printStackTrace();
} catch (Exception e) { e.printStackTrace();
}
} }
 package SAXParser1;

 import java.util.ArrayList;

 import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler; /**
* @author xuhua 解析处理器
* 1.重写方法
*/
public class SAXParserHandler extends DefaultHandler {
/* 全局变量 */
Book book;
String value;
ArrayList<Book> booklist = new ArrayList<Book>(); /**
* 解析开始
*/
@Override
public void startDocument() throws SAXException {
super.startDocument();
System.out.println("parse start");
} /**
* 解析结束
*/
@Override
public void endDocument() throws SAXException {
super.endDocument();
System.out.println("parse end");
} /**
* 开始解析标签
* qName:标签名字 Attributes:属性
*/
@Override
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();
String id = attributes.getValue("id");//获取id属性值
System.out.println(id); /* 获取属性名与属性值 */
int num = attributes.getLength(); // 属性个数
for (int i = 0; i < num; i++) {
System.out.println("属性名:" + attributes.getQName(i));
System.out.println("属性值:" + attributes.getValue(i));
/* 把id属性值set进book实体中 */
if (attributes.getQName(i).equals("id")) {
book.setId(attributes.getValue(i));
}
}
} System.out.println("属性名:" + qName);
} /**
* 结束标签解析
*/
@Override
public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName);
if (qName.equals("book")) {
booklist.add(book);
book = null;
System.out.println("==============结束遍历某一本书的内容=============");
}
/* id为book节点的属性,其他为节点值 */
// else if(qName.equals("id"))
// {
// book.setId(value);
// }
else if (qName.equals("name")) {
book.setName(value);
} else if (qName.equals("price")) {
book.setPrice(value);
} else if (qName.equals("author")) {
book.setAuthor(value);
}
System.out.println(qName + "元素结束"); } /**
* 获取节点值
*/
@Override
public void characters(char[] ch, int start, int length) throws SAXException { super.characters(ch, start, length);
/**/
value = new String(ch, start, length);
// if(value.trim()!=null)
if (!value.trim().equals("")) // 标签之间存在空格
System.out.println(value);
} }

解析处理器

 package SAXParser1;

 public class Book {
private String id;
private String name;
private String price;
private String author;
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 getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
} }

book实体javabean

 <?xml version="1.0" encoding="utf-8"?>
<bookstore>
<book id="1">
<name>java入门</name>
<price>80</price>
<author>张思</author>
</book>
<book id="2">
<name>java进阶</name>
<price>90</price>
<author>叶东</author>
</book> </bookstore>

xml文件