大家好今天我今天给大家讲解一下Android创建xml以及一些解析xml的常用方法。

首先是创建,我们用XmlSerializer这个类来创建一个xml文件,其次是解析xml文件,常用的有dom,sax,XmlPullParser等方法,由于sax代码有点复杂,本节只讲解一下dom与XmlPullParser解析,sax我将会在下一节单独讲解,至于几种解析xml的优缺点我就不再讲述了。

为了方便理解,我做了一个简单的Demo。首先首界面有三个按钮,点击第一个按钮会在sdcard目录下创建一个books.xml文件。另外两个按钮分别是调用dom与XmlPullParser方法解析xml文件,并将结果显示在一个TextView里。大家可以按照我的步骤一步步来:

第一步:新建一个Android工程,命名为XmlDemo

第二步:修改main.xml布局文件,代码如下:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 <? 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,代码如下:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 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卡上新建了文件,需要增加权限,如下代码(第13行):

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 <? 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 >

第五步:运行上述工程,查看效果:

启动首界面:

点击创建XML文件按钮,生成books.xml文件

books.xml内容如下:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <? 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按钮:

点击XmlPullParse解析XML按钮:

Ok~今天就先讲到这里。thx~


更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. 一款常用的 Squid 日志分析工具
  3. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  4. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  5. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  6. Android检测Cursor泄漏的原理以及使用方法
  7. android 资源文件的使用说明
  8. Android(安卓)Studio中JNI程序的单步调试和日志打印
  9. 利用9-Patch PNG来实现ListView的圆角显示

随机推荐

  1. HTML5制作一场精美的烟花盛宴
  2. 【前端词典】11 个 CSS 知识搭配 11 个 J
  3. HTML5 3D蝴蝶飞舞动画
  4. 聊一聊加班严重时要如何自我提升
  5. 阿里对蒋凡的处理真的太重了吗?
  6. jQuery做一个漂亮的下拉框,用十几行代码就
  7. 【前端词典】8 个提高 JS 性能的方法
  8. 辞职后才明白的10个道理
  9. 15个炫酷的CSS3加载动画图标
  10. 【前端词典】这些功能其实不需要 JS,CSS