使用JAXP对XMl进行sax解析
使用JAXP进行sax解析 //创建解析工厂 SAXParserFactory factory=SAXParserFactory.newInstance(); //得到解析工具 SAXParser parse=factory.newSAXParser(); //得到读取器 XMLReader read=parse.getXMLReader(); //设置内容处理 read.setContentHandler(new ListHander()); //5.读取xml内容 read.parse("src/Demo2.xml"); } } //得到xml中所有的内内容 class ListHander implements ContentHandler{ @Override public void characters(char[] ch, int start, int length) throws SAXException { System.out.print(new String(ch,start,length)); } @Override public void endDocument() throws SAXException { // TODO Auto-generated method stub } @Override public void endElement(String uri, String localName, String qName) throws SAXException { System.out.println("</"+qName+">"); } @Override public void endPrefixMapping(String prefix) throws SAXException { // TODO Auto-generated method stub } @Override public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub } @Override public void processingInstruction(String target, String data) throws SAXException { // TODO Auto-generated method stub } @Override public void setDocumentLocator(Locator locator) { // TODO Auto-generated method stub } @Override public void skippedEntity(String name) throws SAXException { // TODO Auto-generated method stub } @Override public void startDocument() throws SAXException { } @Override public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException { System.out.print("<"+qName); for(int i=0;atts!=null&&i<atts.getLength();i++){ System.out.print(" "+atts.getQName(i) +"="+atts.getValue(i)+" "); } System.out.print(">"); } @Override public void startPrefixMapping(String prefix, String uri) throws SAXException { // TODO Auto-generated method stub } } //得到制定的标签名:DefaultHandler实现了ContentHandler接口 class TagValue2 extends DefaultHandler{ private String needName="书名"; private String currentName=null; private int currentNumber=0; private int needNumber=2; @Override public void startElement(String arg0, String arg1, String qName, Attributes arg3) throws SAXException { currentName=qName; if(currentName.equals(needName)){ currentNumber++; } } @Override public void characters(char[] ch, int arg1, int arg2) throws SAXException { System.out.println(currentName); if((currentNumber==needNumber)&&(currentName.equals(needName))){ System.out.println(new String(ch,arg1,arg2)); } } @Override public void endElement(String arg0, String arg1, String arg2) throws SAXException { } //把xml文档中的每一本书封装到Book对象中,并把多个List对象中,并返回 class T extends DefaultHandler{ private ArrayList<Book> list=new ArrayList<Book>(); private Book book; private String name; public ArrayList<Book> getList(){ return list; } @Override public void characters(char[] ch, int start, int length) throws SAXException { String str=new String(ch,start,length); if(("书名").equals(name)){//equals两边的不能换换了出问题 book.setName(str); } if(("价钱").equals(name)){ book.setPrice(str); } if(("作者").equals(name)){ book.setAuthor(str); } str=null; } @Override public void endElement(String arg0, String arg1, String qName) throws SAXException { if(qName.equals("书")){ list.add(book); book=null; } name=null;//注意要置空 } @Override public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException { name=qName; if(name.equals("书")) book=new Book(); } }
现在的几乎什么都不懂,但是不代表以后的我也是这样。