中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android——xml文件的解析

發布時間:2020-06-08 18:35:09 來源:網絡 閱讀:417 作者:wauoen 欄目:移動開發

解析方法: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 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();
		}

	}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

深圳市| 东兰县| 亚东县| 巨野县| 西和县| 外汇| 米脂县| 绿春县| 龙岩市| 民权县| 通河县| 留坝县| 唐河县| 岳普湖县| 石棉县| 缙云县| 海晏县| 克什克腾旗| 郎溪县| 成都市| 疏勒县| 鹰潭市| 湖南省| 馆陶县| 永吉县| 平邑县| 光山县| 商城县| 汝南县| 赤壁市| 乐昌市| 西华县| 剑河县| 新兴县| 贵州省| 大竹县| 恭城| 潼关县| 溆浦县| 常山县| 玛曲县|