JAVA解析xml(SAX)

来源:互联网 发布:大数据商机 编辑:程序博客网 时间:2024/05/29 16:30

1.获取SAXParserFactory对象

SAXParserFactory factory= SAXParserFactory.newInstance();

2.获取SAXParser对象

SAXParser parser=factory.newSAXParser();

3.加载文件

Handler handler=new Handler();
parser.parse("books.xml", handler);
4.创建解析类,继承DefaultHandler,通过重写方法实现解析xml功能

public class Handler extends DefaultHandler {private com.xbx.Book book;String value;    public ArrayList<com.xbx.Book> list=new ArrayList<>();//解析开始节点@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {// TODO Auto-generated method stubsuper.startElement(uri, localName, qName, attributes);if (qName.equals("book")) {book=new com.xbx.Book();int att_l=attributes.getLength();//已知属性名  获取属性值//System.out.println(attributes.getValue("id"));//不知道属性名获取属性值与属性名for (int i = 0; i < att_l; i++) {//获取属性名System.out.print("属性"+attributes.getQName(i));if (attributes.getQName(i).equals("id")) {book.setId(attributes.getQName(i));}//获取属性值System.out.println("--------值:"+attributes.getValue(i));}}if (!qName.equals("bookstore")) {if (!qName.equals("book")) {System.out.print(qName);}}}@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {// TODO Auto-generated method stubsuper.endElement(uri, localName, qName);if (qName.equals("book")) {list.add(book);book=null;}else if (qName.equals("id")) {book.setId(value);}else if (qName.equals("name")){book.setName(value);}else if (qName.equals("year")){book.setYear(value);}else if (qName.equals("price")){book.setPrice(value);}}//文件解析开始@Overridepublic void startDocument() throws SAXException {System.out.println("解析开始");// TODO Auto-generated method stubsuper.startDocument();}//文件解析结束@Overridepublic void endDocument() throws SAXException {System.out.println("解析结束");// TODO Auto-generated method stubsuper.endDocument();}//获取节点的值,将xml存入ch中,调用方法,获取属性所在的开始位置与长度,读取@Overridepublic void characters(char[] ch, int start, int length) throws SAXException {// TODO Auto-generated method stubsuper.characters(ch, start, length); value=new String(ch, start, length);if (!value.trim().equals("")) {System.out.println("-----"+value);}}}
主函数的代码:

public class SaxTest {public static void main(String[] args) {//获取SAXParserFactory对象SAXParserFactory factory= SAXParserFactory.newInstance();try {//获取SAXParser对象SAXParser parser=factory.newSAXParser();Handler handler=new Handler();//加载文件parser.parse("books.xml", handler);for (int j = 0; j < handler.list.size(); j++) {Book book=handler.list.get(j);System.out.println(book.getName());//System.out.println(book.getId());}} catch (ParserConfigurationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SAXException e) {// TODO Auto-generated catch blocke.printStackTrace();}catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
5.通过创建对象保存解析的xml数据

建立Book类:

public class Book {private String id;private String year;private String price;private String name ;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}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;}}
在Handler中创建对象并保存到List中


原创粉丝点击