Android——xml檔案的解析

來源:互聯網
上載者:User

標籤:person   public   

解析方法:DOM、SAX、PULL

  1. 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 nameSystem.out.println("名字: "        + child.getFirstChild().getNodeValue());} else if ("age".equals(name)) {// 擷取person ageSystem.out.println("年齡:"        + child.getFirstChild().getNodeValue());}}}}} 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();}}

2.SAX:從上往下挨個遍曆標籤

// 1.建立一個Handler類,繼承DefaultHandlerclass 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 blocke.printStackTrace();} 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();}}

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 blocke.printStackTrace();} catch (XmlPullParserException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}


本文出自 “Androidcamera小結” 部落格,請務必保留此出處http://7183397.blog.51cto.com/7173397/1606124

Android——xml檔案的解析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.