解析方法:DOM、SAX、PULL

DOM:将xml转化为树进行遍历

publicvoidDOMParser(){try{//1.创建DocumentBuilder实例DocumentBuilderbuilder=DocumentBuilderFactory.newInstance().newDocumentBuilder();//2.创建Document实例Documentdoc=builder.parse(file);//3.获取xml文件的根节点(persons)Elementelement=doc.getDocumentElement();//4.获取根节点的子节点列表(person的列表)NodeListpersonList=element.getElementsByTagName("person");//TODO//NodeListpersonList=element.getChildNodes();//这个方法不行//5.遍历所有的person节点for(inti=0;i<personList.getLength();i++){//6.获取单个person节点Elementperson=(Element)personList.item(i);//7.读取person的属性Stringid=person.getAttribute("id");System.out.println("personid:"+id);//8.获取person的子节点列表NodeListchildList=person.getChildNodes();//9.遍历person子节点for(intj=0;j<childList.getLength();j++){//10.访问子节点Nodechild=(Node)childList.item(j);if(child.getNodeType()==Node.ELEMENT_NODE){//如果子节点是一个元素节点//11.获取元素名称Stringname=child.getNodeName();if("name".equals(name)){//获取personnameSystem.out.println("名字:"+child.getFirstChild().getNodeValue());}elseif("age".equals(name)){//获取personageSystem.out.println("年龄:"+child.getFirstChild().getNodeValue());}}}}}catch(ParserConfigurationExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(SAXExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}

2.SAX:从上往下挨个遍历标签

//1.创建一个Handler类,继承DefaultHandlerclassSaxHandlerextendsDefaultHandler{/**上一个节点名称*/privateStringtag;//需要重写五个方法://1.startDocument():开始文档时做预处理//2.endDocument():结束文档时做善后处理//3.startElement():遇到开始标签是调用该方法//4.endElement():遇到结束标签时调用该方法//5.characters():内容publicvoidstartDocument()throwsSAXException{System.out.println("调用startDocument()方法");}publicvoidendDocument()throwsSAXException{System.out.println("调用endDocument()方法");}//在该方法中读取标签的属性publicvoidstartElement(Stringuri,StringlocalName,StringqName,Attributesattributes)throwsSAXException{System.out.println("调用startElement()方法"+"localName:"+localName+"qName:"+qName);if("person".equals(qName)){System.out.println("person:");System.out.println("id:"+attributes.getValue("id"));}tag=qName;}publicvoidendElement(Stringuri,StringlocalName,StringqName)throwsSAXException{System.out.println("调用endElement()方法");}//读取标签内容//每次都开始结束标签时都调用publicvoidcharacters(char[]ch,intstart,intlength)throwsSAXException{System.out.println("调用characters()方法");Stringdata=newString(ch,start,length);if("name".equals(tag)){System.out.println("name:"+data);}elseif("age".equals(tag)){System.out.println("age:"+data);}}}//2.sax解析publicvoidSAXParser(){try{//2.1创建解析器javax.xml.parsers.SAXParserparser=SAXParserFactory.newInstance().newSAXParser();//2.2创建处理器SaxHandlerhandler=newSaxHandler();//2.3创建文件输入流FileInputStreamfis=newFileInputStream(file);//2.4解析文件parser.parse(file,handler);}catch(FileNotFoundExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(ParserConfigurationExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(SAXExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}

3.Pull:与SAX类似,在android开发中应用较多

publicstaticvoidxmlPullParser(InputStreamis){try{//1.获取输入流//2.获取解析器XmlPullParserparser=Xml.newPullParser();parser.setInput(is,"utf-8");//3.获取事件类型inteventType=parser.getEventType();//4.遍历节点while(eventType!=XmlPullParser.END_DOCUMENT){switch(eventType){caseXmlPullParser.START_DOCUMENT://文件开启break;caseXmlPullParser.START_TAG://标签开始//4.1获取节点名称Stringname=parser.getName();if(name.equals("person")){//4.2获取节点属性值Stringid=parser.getAttributeValue(0);}elseif(name.equals("name")){//4.3获取下个文本值System.out.println("name:"+parser.nextText());}elseif(name.equals("age")){System.out.println("age:"+parser.nextText());}break;caseXmlPullParser.END_TAG://标签结束break;default:break;}eventType=parser.next();}is.close();}catch(FileNotFoundExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(XmlPullParserExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}