// 载入xml
//1.创建解析工厂
SAXParserFactory factory=SAXParserFactory.newInstance();
//2.得到解析器
SAXParser sp=factory.newSAXParser();
//3.得到读取器
XMLReader reader=sp.getXMLReader();
//4.设置内容处理器 本步骤最重要 第五步已经完成处理了
reader.setContentHandler(new
ListHandler
());
//5.读取xml文档内容
reader.parse("src/book.xml");
//得到xml文档所有内容 classListHandlerimplements ContentHandler{ //遇到开始标签 @Override public void startElement(String uri,String localName,String qName, Attributes atts) throws SAXException { System.out.println("<"+qName+">"); for (int i=0;atts!=null && i<atts.getLength();i++){ String attName=atts.getQName(i); String attValue=atts.getValue(i); System.out.println(attName+"="+attValue); } }
//标签体内容 @Override public void characters(char[] ch,int start,int length) throws SAXException { System.out.println(new String(ch,start,length));} //结束标签 public void endElement(String uri,String qName) System.out.println("</"+qName+">"); } //此接口有很多方法 此处未用到没写出 }
//获取指定标签
//4.设置内容处理器
reader.setContentHandler(new
TagValueHandler());
// 获取指定标签 作者 的值
class TagValueHandler extends DefaultHandler {
private String currentTag;// 记住当前解析器得到的是什么标签
private int needNumber = 2;// 记住想获取第几个作者标签的值
private int currentNumber;// 当前解析的是第几个
@Override
public void startElement(String uri,
Attributes attributes) throws SAXException {
currentTag = qName;
if ("作者".equals(currentTag))
currentNumber++;
}
@Override
public void characters(char[] ch,int length)
throws SAXException {
if ("作者".equals(currentTag) && currentNumber == needNumber) {
System.out.println(new String(ch,length));
}
}
@Override
public void endElement(String uri,String qName)
throws SAXException {
currentTag = null;
}
}
//将内容封装为bean
reader.setContentHandler(new BeanListHandler());
// 把每一本书封装到一个book对象,并把book对象 class BeanListHandler extends DefaultHandler { private List<Book> list = new ArrayList<Book>(); public List<Book> getList() { return list; } private String currentTag; private Book book; @Override public void startElement(String uri,Attributes attributes) throws SAXException { currentTag = qName; if ("书".equals(currentTag)) { book = new Book(); } } @Override public void characters(char[] ch,int length) throws SAXException { if ("书名".equals(currentTag)) { book.setName(new String(ch,length)); } if ("作者".equals(currentTag)) { book.setAuthor(new String(ch,length)); } if ("售价".equals(currentTag)) { book.setPrice(new String(ch,length)); } } @Override public void endElement(String uri,String qName) throws SAXException { if (qName.equals("书")) { list.add(book); book = null; } currentTag = null;// 这句有必要不加 报空指针异常 } }
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|