解析方法:DOM、SAX、PULL
DOM:将xml转化为树进行遍历
public void DOMParser() { try { // 1.创建DocumentBuilder实例 DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); // 2.创建Document实例 Document doc = builder.parse(file); // 3.获取xml文件的根节点(persons) Element element = doc.getDocumentElement(); // 4.获取根节点的子节点列表(person的列表) NodeList personList = element.getElementsByTagName("person");// TODO // NodeList personList = element.getChildNodes();//这个方法不行 // 5. 遍历所有的person节点 for (int i = 0; i < personList.getLength(); i++) { // 6.获取单个person节点 Element person = (Element) personList.item(i); // 7.读取person的属性 String id = person.getAttribute("id"); System.out.println("person id: " + id); // 8.获取person的子节点列表 NodeList childList = person.getChildNodes(); // 9.遍历person子节点 for (int j = 0; j < childList.getLength(); j++) { // 10.访问子节点 Node child = (Node) childList.item(j); if (child.getNodeType() == Node.ELEMENT_NODE) {// 如果子节点是一个元素节点 // 11.获取元素名称 String name = child.getNodeName(); if ("name".equals(name)) {// 获取person name System.out.println("名字: " + child.getFirstChild().getNodeValue()); } else if ("age".equals(name)) {// 获取person age System.out.println("年龄:" + child.getFirstChild().getNodeValue()); } } } } } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
2.SAX:从上往下挨个遍历标签
// 1.创建一个Handler类,继承DefaultHandler class SaxHandler extends DefaultHandler { /** 上一个节点名称 */ private String tag; // 需要重写五个方法: // 1.startDocument():开始文档时做预处理 // 2.endDocument():结束文档时做善后处理 // 3.startElement():遇到开始标签是调用该方法 // 4.endElement():遇到结束标签时调用该方法 // 5.characters():内容 public void startDocument() throws SAXException { System.out.println("调用startDocument()方法"); } public void endDocument() throws SAXException { System.out.println("调用endDocument()方法"); } // 在该方法中读取标签的属性 public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { 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; } public void endElement(String uri, String localName, String qName) throws SAXException { System.out.println("调用endElement()方法"); } // 读取标签内容 // 每次都开始结束标签时都调用 public void characters(char[] ch, int start, int length) throws SAXException { System.out.println("调用characters()方法"); String data = new String(ch, start, length); if ("name".equals(tag)) { System.out.println("name: " + data); } else if ("age".equals(tag)) { System.out.println("age: " + data); } } } // 2.sax 解析 public void SAXParser() { try { //2.1创建解析器 javax.xml.parsers.SAXParser parser = SAXParserFactory.newInstance() .newSAXParser(); //2.2创建处理器 SaxHandler handler = new SaxHandler(); //2.3创建文件输入流 FileInputStream fis = new FileInputStream(file); //2.4解析文件 parser.parse(file, handler); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
3.Pull:与SAX类似,在android开发中应用较多
public static void xmlPullParser(InputStream is) { try { // 1.获取输入流 // 2.获取解析器 XmlPullParser parser = Xml.newPullParser(); parser.setInput(is, "utf-8"); // 3.获取事件类型 int eventType = parser.getEventType(); // 4.遍历节点 while(eventType != XmlPullParser.END_DOCUMENT){ switch (eventType) { case XmlPullParser.START_DOCUMENT://文件开启 break; case XmlPullParser.START_TAG://标签开始 //4.1获取节点名称 String name = parser.getName(); if(name.equals("person")){ //4.2 获取节点属性值 String id = parser.getAttributeValue(0); }else if(name.equals("name")){ //4.3 获取下个文本值 System.out.println("name: "+ parser.nextText()); }else if(name.equals("age")){ System.out.println("age: "+ parser.nextText()); } break; case XmlPullParser.END_TAG://标签结束 break; default: break; } eventType = parser.next(); } is.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。