26.android:
id="@+id/result"
27.android:
layout_width="fill_parent"
28.android:
layout_height="wrap_content"
29./>
30.
第三步:
修改主核心程序XmlDemo.java,代码如下:
viewplaincopytoclipboardprint?
1.packagecom.tutor.xml;
2.importjava.io.File;
3.importjava.io.FileNotFoundException;
4.importjava.io.FileOutputStream;
5.importjava.io.IOException;
6.importjavax.xml.parsers.DocumentBuilder;
7.importjavax.xml.parsers.DocumentBuilderFactory;
8.importjavax.xml.parsers.ParserConfigurationException;
9.importorg.w3c.dom.Document;
10.importorg.w3c.dom.Element;
11.importorg.w3c.dom.NodeList;
12.importorg.xml.sax.SAXException;
13.importorg.xmlpull.v1.XmlPullParser;
14.importorg.xmlpull.v1.XmlPullParserException;
15.importorg.xmlpull.v1.XmlPullParserFactory;
16.importorg.xmlpull.v1.XmlSerializer;
17.importandroid.app.Activity;
18.importandroid.os.Bundle;
19.importandroid.util.Log;
20.importandroid.util.Xml;
21.importandroid.view.View;
22.importandroid.view.View.OnClickListener;
23.importandroid.widget.Button;
24.importandroid.widget.TextView;
25.importandroid.widget.Toast;
26.publicclassXmlDemoextendsActivityimplementsOnClickListener{
27.
28.privatestaticfinalStringBOOKS_PATH="/sdcard/books.xml";
29.privateButtonmButton1,mButton2,mButton3;
30.privateTextViewmTextView;
31.@Override
32.publicvoidonCreate(BundlesavedInstanceState){
33.super.onCreate(savedInstanceState);
34.setContentView(R.layout.main);
35.setupViews();
36.}
37.//初始化工作
38.privatevoidsetupViews(){
39.mTextView=(TextView)findViewById(R.id.result);
40.mButton1=(Button)findViewById(R.id.btn1);
41.mButton2=(Button)findViewById(R.id.btn2);
42.mButton3=(Button)findViewById(R.id.btn3);
43.mButton1.setOnClickListener(this);
44.mButton2.setOnClickListener(this);
45.mButton3.setOnClickListener(this);
46.}
47.//创建xml文件
48.privatevoidcreateXmlFile(){
49.FilelinceseFile=newFile(BOOKS_PATH);
50.try{
51.linceseFile.createNewFile();
52.}catch(IOExceptione){
53.Log.e("IOException","exceptionincreateNewFile()method");
54.}
55.FileOutputStreamfileos=null;
56.try{
57.fileos=newFileOutputStream(linceseFile);
58.}catch(FileNotFoundExceptione){
59.Log.e("FileNotFoundException","can'tcreateFileOutputStream");
60.}
61.XmlSerializerserializer=Xml.newSerializer();
62.try{
63.serializer.setOutput(fileos,"UTF-8");
64.serializer.startDocument(null,true);
65.serializer.startTag(null,"books");
66.for(inti=0;i<3;i++){
67.serializer.startTag(null,"book");
68.serializer.startTag(null,"bookname");
69.serializer.text("Android教程"+i);
70.serializer.endTag(null,"bookname");
71.serializer.startTag(null,"bookauthor");
72.serializer.text("Frankie"+i);
73.serializer.endTag(null,"bookauthor");
74.serializer.endTag(null,"book");
75.}
76.
77.serializer.endTag(null,"books");
78.serializer.endDocument();
79.serializer.flush();
80.fileos.close();
81.}catch(Exceptione){
82.Log.e("Exception","erroroccurredwhilecreatingxmlfile");
83.}
84.Toast.makeText(getApplicationContext(),"创建xml文件成功!
",Toast.LENGTH_SHORT).show();
85.}
86.//dom解析xml文件
87.privatevoiddomParseXML(){
88.Filefile=newFile(BOOKS_PATH);
89.DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();
90.DocumentBuilderdb=null;
91.try{
92.db=dbf.newDocumentBuilder();
93.}catch(ParserConfigurationExceptione){
94.e.printStackTrace();
95.}
96.Documentdoc=null;
97.try{
98.doc=db.parse(file);
99.}catch(SAXExceptione){
100.e.printStackTrace();
101.}catch(IOExceptione){
102.e.printStackTrace();
103.}
104.Elementroot=doc.getDocumentElement();
105.NodeListbooks=root.getElementsByTagName("book");
106.Stringres="本结果是通过dom解析:
"+"/n";
107.for(inti=0;i108.Elementbook=(Element)books.item(i);
109.Elementbookname=(Element)book.getElementsByTagName("bookname").item(0);
110.Elementbookauthor=(Element)book.getElementsByTagName("bookauthor").item(0);
111.res+="书名:
"+bookname.getFirstChild().getNodeValue()+""+
112."作者:
"+bookauthor.getFirstChild().getNodeValue()+"/n";
113.}
114.
115.mTextView.setText(res);
116.}
117.
118.//xmlPullParser解析xml文件
119.privatevoidxmlPullParseXML(){
120.Stringres="本结果是通过XmlPullParse解析:
"+"/n";
121.try{
122.XmlPullParserFactoryfactory=XmlPullParserFactory.newInstance();
123.XmlPullParserxmlPullParser=factory.newPullParser();
124.
125.xmlPullParser.setInput(Thread.currentThread().getContextClassLoader()
126..getResourceAsStream(BOOKS_PATH),"UTF-8");
127.
128.inteventType=xmlPullParser.getEventType();
129.
130.try{
131.while(eventType!
=XmlPullParser.END_DOCUMENT){
132.StringnodeName=xmlPullParser.getName();
133.switch(eventType){
134.caseXmlPullParser.START_TAG:
135.if("bookname".equals(nodeName)){
136.res+="书名:
"+xmlPullParser.nextText()+"";
137.}elseif("bookauthor".equals(nodeName)){
138.res+="作者:
"+xmlPullParser.nextText()+"/n";
139.}
140.break;
141.default:
142.break;
143.}
144.eventType=xmlPullParser.next();
145.}
146.}catch(IOExceptione){
147.e.printStackTrace();
148.}
149.}catch(XmlPullParserExceptione){
150.e.printStackTrace();
151.}
152.
153.mTextView.setText(res);
154.}
155.//按钮事件响应
156.publicvoidonClick(Viewv){
157.if(v==mButton1){
158.createXmlFile();
159.}elseif(v==mButton2){
160.domParseXML();
161.}elseif(v==mButton3){
162.xmlPullParseXML();
163.}
164.}
165.}
第四步:
由于我们在Sd卡上新建了文件,需要增加权限,如下代码(第16行):
viewplaincopytoclipboardprint?
1.
xmlversion="1.0"encoding="utf-8"?
>
2.android="
3.package="com.tutor.xml"
4.android:
versionCode="1"
5.android:
versionName="1.0">
6.icon="@drawable/icon"android:
label="@string/app_name">
7.name=".XmlDemo"
8.android:
label="@string/app_name">
9.
10.name="android.intent.action.MAIN"/>
11.name="android.intent.category.LAUNCHER"/>
12.
13.
14.
15.minSdkVersion="7"/>
16.name="android.permission.WRITE_EXTERNAL_STORAGE"/>
17.
第五步:
运行上述工程,查看效果:
启动首界面:
点击创建XML文件按钮,生成books.xml文件
books.xml内容如下:
viewplaincopytoclipboardprint?
1.
xmlversion='1.0'encoding='UTF-8'standalone='yes'?
>
2.
3.
4.Android教程0
5.Frankie0
6.
7.
8.Android教程1
9.Frankie1
10.
11.
12.Android教程2
13.Frankie2
14.
15.
点击DOM解析XML按钮:
点击XmlPullParse解析XML按钮:
Ok~今天就先讲到这里。
thx~