您好,登錄后才能下訂單哦!
解析方法: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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。