天天看點

xml檔案解析之pull解析

xml檔案解析:

xml檔案:

<pre name="code" class="html"><span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?>
<books>
    <book>
       <id>100</id>
       <name>android學習</name>
       <price>20</price>
    </book>
    
    <book>
        <id>101</id>
        <name>好好學習,天天向上</name>
        <price>12.2</price>
    </book>
</books></span>
           
<span style="font-size:14px;">//将xml檔案轉換為資料
	public void xmlParseTest() throws IOException, XmlPullParserException{
		XmlPullParser pullParser = Xml.newPullParser();            //擷取XmlPullParser對象
		InputStream is = getContext().getAssets().open("parse.xml");   //解析文本
		ArrayList<Books> books = null ;
		Books book = null;                //通過對象Books擷取資料
		pullParser.setInput(is, "UTF-8");
		int type = pullParser.getEventType();    //擷取事件類型
		while (type != pullParser.END_DOCUMENT) {   //結束文本</books>
			switch(type){
			case XmlPullParser.START_DOCUMENT:    //開始文本<books>
				books = new ArrayList<Books>();
				break;
			case XmlPullParser.START_TAG:    //開始标記   <book>
				if (pullParser.getName().equals("book")) {
					book = new Books();
				}else if (pullParser.getName().equals("id")) {
					type = pullParser.next();    //指向下一個位置,不然無法擷取資料
					book.setId(Integer.parseInt(pullParser.getText()));
				}else if (pullParser.getName().equals("name")) {
					type = pullParser.next();      
					book.setName(pullParser.getText());
				}else if (pullParser.getName().equals("price")) {
					type = pullParser.next();
					book.setPrice(Double.valueOf(pullParser.getText()));
				}
				
				break;
			case XmlPullParser.END_TAG:   //結束标記      </books>
				if (pullParser.getName().equals("book")) {
					books.add(book);
					book = null;    //置為空釋放資源
				}
				break;
			}
			type = pullParser.next();    //指向下一個标記
			
		}
		for (Books books2 : books) {
			Logs.d("books-----id"+books2.getId()+",name--"+books2.getName());
		}
		
	}</span>
           

生成xml檔案:

<span style="font-size:14px;">//将資料轉換為xml字元串
	public void serialize() throws IllegalArgumentException, IllegalStateException, IOException{
		XmlSerializer serializer = Xml.newSerializer();
		ArrayList<Books> bookList = new ArrayList<Books>();
		Books books = new Books();
		books.setId(12);
		books.setName("android解析xml學習1");
		books.setPrice(23.3);
		bookList.add(books);
		
		books = new Books();
		books.setId(13);
		books.setName("android解析xml學習2");
		books.setPrice(24.3);
		bookList.add(books);
		
		books = new Books();
		books.setId(14);
		books.setName("android解析xml學習3");
		books.setPrice(25.3);
		bookList.add(books);
		
		StringWriter os = new StringWriter();
		
		serializer.setOutput(os);
		serializer.startDocument("UTF-8", true);
		serializer.startTag("", "books");
		
		for (Books books2 : bookList) {         //周遊資料
			serializer.startTag("", "book");
			
			serializer.startTag("", "id");
			serializer.text(books2.getId()+"");
			serializer.endTag("", "id");
			
			serializer.startTag("", "name");
			serializer.text(books2.getName());
			serializer.endTag("", "name");
			
			serializer.startTag("", "price");
			serializer.text(books2.getPrice()+"");
			serializer.endTag("", "price");
			
			serializer.endTag("", "book");
		}
		serializer.endTag("", "books");
		serializer.endDocument();
		
		Logs.d(""+os.toString());          //此時列印資料與上方xml相同
	}</span>