首先是创建,我们用XmlSerializer这个类来创建一个xml文件,其次是解析xml文件,常用的有dom,sax,XmlPullParser等方法,由于sax代码有点复杂,本节只讲解一下dom与XmlPullParser解析,至于几种解析xml的优缺点我就不再讲述了。
为了方便理解,我做了一个简单的Demo。首先首界面有三个按钮,点击第一个按钮会在sdcard目录下创建一个books.xml文件,另外两个按钮分别是调用dom与XmlPullParser方法解析xml文件,并将结果显示在一个TextView里。大家可以按照我的步骤一步步来:
第一步:新建一个Android工程,命名为XmlDemo.
第二步:修改main.xml布局文件,代码如下:
<? xml version ="1.0" encoding ="utf-8" ?> < LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android" android:orientation ="vertical" android:layout_width ="fill_parent" android:layout_height ="fill_parent" > < Button android:id ="@+id/btn1" android:layout_width ="fill_parent" android:layout_height ="wrap_content" android:text ="创建XML文件" /> < Button android:id ="@+id/btn2" android:layout_width ="fill_parent" android:layout_height ="wrap_content" android:text ="DOM解析XML" /> < Button android:id ="@+id/btn3" android:layout_width ="fill_parent" android:layout_height ="wrap_content" android:text ="XmlPullParse解析XML" /> < TextView android:id ="@+id/result" android:layout_width ="fill_parent" android:layout_height ="wrap_content" /> </ LinearLayout >
第三步:修改主核心程序XmlDemo.java,代码如下:
package com.tutor.xml; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserFactory; import org.xmlpull.v1.XmlSerializer; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.util.Xml; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class XmlDemo extends Activity implements OnClickListener { private static final String BOOKS_PATH = "/sdcard/books.xml"; private Button mButton1,mButton2,mButton3; private TextView mTextView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setupViews(); } //初始化工作 private void setupViews(){ mTextView = (TextView)findViewById(R.id.result); mButton1 = (Button)findViewById(R.id.btn1); mButton2 = (Button)findViewById(R.id.btn2); mButton3 = (Button)findViewById(R.id.btn3); mButton1.setOnClickListener( this); mButton2.setOnClickListener( this); mButton3.setOnClickListener( this); } //创建xml文件 private void createXmlFile(){ File linceseFile = new File(BOOKS_PATH); try{ linceseFile.createNewFile(); } catch (IOException e) { Log.e( "IOException", "exception in createNewFile() method"); } FileOutputStream fileos = null; try{ fileos = new FileOutputStream(linceseFile); } catch (FileNotFoundException e) { Log.e( "FileNotFoundException", "can't create FileOutputStream"); } XmlSerializer serializer = Xml.newSerializer(); try { serializer.setOutput(fileos, "UTF-8"); serializer.startDocument( null, true); serializer.startTag( null, "books"); for( int i = 0; i < 3; i ++){ serializer.startTag( null, "book"); serializer.startTag( null, "bookname"); serializer.text( "Android教程" + i); serializer.endTag( null, "bookname"); serializer.startTag( null, "bookauthor"); serializer.text( "Frankie" + i); serializer.endTag( null, "bookauthor"); serializer.endTag( null, "book"); } serializer.endTag( null, "books"); serializer.endDocument(); serializer.flush(); fileos.close(); } catch (Exception e) { Log.e( "Exception", "error occurred while creating xml file"); } Toast.makeText(getApplicationContext(), "创建xml文件成功!", Toast.LENGTH_SHORT).show(); } //dom解析xml文件 private void domParseXML(){ File file = new File(BOOKS_PATH); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = null; try { db = dbf.newDocumentBuilder(); } catch (ParserConfigurationException e) { e.printStackTrace(); } Document doc = null; try { doc = db.parse(file); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } Element root = doc.getDocumentElement(); NodeList books = root.getElementsByTagName( "book"); String res = "本结果是通过dom解析:" + "/n"; for( int i = 0; i < books.getLength();i++){ Element book = (Element)books.item(i); Element bookname = (Element)book.getElementsByTagName( "bookname").item(0); Element bookauthor = (Element)book.getElementsByTagName( "bookauthor").item(0); res += "书名: " + bookname.getFirstChild().getNodeValue() + " " + "作者: " + bookauthor.getFirstChild().getNodeValue() + "/n"; } mTextView.setText(res); } //xmlPullParser解析xml文件 private void xmlPullParseXML(){ String res = "本结果是通过XmlPullParse解析:" + "/n"; try { XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser xmlPullParser = factory.newPullParser(); xmlPullParser.setInput(Thread.currentThread().getContextClassLoader() .getResourceAsStream(BOOKS_PATH), "UTF-8"); int eventType = xmlPullParser.getEventType(); try{ while (eventType != XmlPullParser.END_DOCUMENT) { String nodeName = xmlPullParser.getName(); switch (eventType) { case XmlPullParser.START_TAG: if( "bookname".equals(nodeName)){ res += "书名: " + xmlPullParser.nextText() + " "; } else if( "bookauthor".equals(nodeName)){ res += "作者: " + xmlPullParser.nextText() + "/n"; } break; default: break; } eventType = xmlPullParser.next(); } } catch (IOException e) { e.printStackTrace(); } } catch (XmlPullParserException e) { e.printStackTrace(); } mTextView.setText(res); } //按钮事件响应 public void onClick(View v) { if(v == mButton1){ createXmlFile(); } else if(v == mButton2){ domParseXML(); } else if(v == mButton3){ xmlPullParseXML(); } } }
第四步:由于我们在Sd卡上新建了文件,需要增加权限,如下代码(第16行):
<? xml version ="1.0" encoding ="utf-8" ?> < manifest xmlns:android ="http://schemas.android.com/apk/res/android" package ="com.tutor.xml" android:versionCode ="1" android:versionName ="1.0" > < application android:icon ="@drawable/icon" android:label ="@string/app_name" > < activity android:name =".XmlDemo" android:label ="@string/app_name" > < intent-filter > < action android:name ="android.intent.action.MAIN" /> < category android:name ="android.intent.category.LAUNCHER" /> </ intent-filter > </ activity > </ application > < uses-sdk android:minSdkVersion ="7" /> < uses-permission android:name ="android.permission.WRITE_EXTERNAL_STORAGE" /> </ manifest >
第五步:运行上述工程,查看效果:
启动首界面:
![](http://hi.csdn.net/p_w_upload/201009/17/0_1284706095FewF.gif)
点击创建XML文件按钮,生成books.xml文件
![](http://hi.csdn.net/p_w_upload/201009/17/0_1284706104DN3g.gif)
books.xml内容如下:
- <?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
- <books>
- <book>
- <bookname>Android教程0</bookname>
- <bookauthor>Frankie0</bookauthor>
- </book>
- <book>
- <bookname>Android教程1</bookname>
- <bookauthor>Frankie1</bookauthor>
- </book>
- <book>
- <bookname>Android教程2</bookname>
- <bookauthor>Frankie2</bookauthor>
- </book>
- </books>
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?> <books> <book> <bookname>Android教程0</bookname> <bookauthor>Frankie0</bookauthor> </book> <book> <bookname>Android教程1</bookname> <bookauthor>Frankie1</bookauthor> </book> <book> <bookname>Android教程2</bookname> <bookauthor>Frankie2</bookauthor> </book> </books>
点击DOM解析XML按钮:
![](http://hi.csdn.net/p_w_upload/201009/17/0_12847065089012.gif)
点击XmlPullParse解析XML按钮:
![](http://hi.csdn.net/p_w_upload/201009/17/0_12847068995HR2.gif)
0
收藏