android SAX 解析 xml文档【转】

mac2022-06-30  32

res/layout/main014.xm

View Code <?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"><TextView android:text="用户Id" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView><EditText android:text="" android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/userid" android:singleLine="true"></EditText><TextView android:text="用户名" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView><EditText android:text="" android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/username" android:singleLine="true"></EditText><TextView android:text="用户密码" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView><EditText android:text="" android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/password" android:singleLine="true"></EditText><TextView android:text="用户信息" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView><EditText android:text="" android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/info" android:singleLine="true"></EditText><Button android:text="To XML" android:id="@+id/toXml" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button><Button android:text="Read XML" android:id="@+id/readXml" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button></LinearLayout>

res/layout/read.xml

View Code <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical"><LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent"><TextView android:text="用户id:\n" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView><TextView android:text="" android:id="@+id/r_userid" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView></LinearLayout><LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent"><TextView android:text="用户名:\n" android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView><TextView android:text="" android:id="@+id/r_username" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView></LinearLayout><LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent"><TextView android:text="用户密码:\n" android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView><TextView android:text="" android:id="@+id/r_password" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView></LinearLayout><LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent"><TextView android:text="用户信息:\n" android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView><TextView android:text="" android:id="@+id/r_info" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView></LinearLayout></LinearLayout>

src/B.Unit/User.java

View Code package B.Unit;public class User { private int userId; private String userName; private String password; private String info; public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getInfo() { return info; } public void setInfo(String info) { this.info = info; }}

src/B.Unit/SaxDoc.java

package B.Unit;import java.util.ArrayList;import java.util.List;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;/** * 实现丢xml文件解析,返回一个list对象 * * */public class SaxDoc extends DefaultHandler { private List<User> list = null; private User user = null; private String tagname; /** * 开始解析xml文档 * */ @Override public void startDocument() throws SAXException { System.out.println("startDocument"); list = new ArrayList<User>(); super.startDocument(); } StringBuffer sb = new StringBuffer(); /** * 开始处理节点,获得节点的属性 * */ @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { sb.delete(0, sb.length()); if (localName.equals("user")) { user = new User(); user.setUserId(Integer.parseInt(attributes.getValue("id"))); } this.tagname = localName; super.startElement(uri, localName, qName, attributes); } /** * 获取节点内容 * */ @Override public void characters(char[] ch, int start, int length) throws SAXException { if (this.tagname != "") { if (this.tagname.equals("name")) { sb.append(ch, start, length); user.setUserName(sb.toString()); } else if (this.tagname.equals("pwd")) { sb.append(ch, start, length); user.setPassword(sb.toString()); } else if (this.tagname.equals("info")) { sb.append(ch, start, length); user.setInfo(sb.toString()); } } super.characters(ch, start, length); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { // 一个元素结束后往list里加入一个user对象 if (localName.equals("user")) { list.add(user); } super.endElement(uri, localName, qName); } @Override public void endDocument() throws SAXException { super.endDocument(); } // 返回user list对象 public List<User> getUserList() { return list; }}

src/B.Unit/SaxWriteXml.java

package B.Unit;import java.io.File;import java.io.FileOutputStream;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.StringWriter;import java.util.List;import org.xmlpull.v1.XmlSerializer;import android.os.Environment;import android.util.Xml;public class SaxWriteXml { public String writeUserInfoToString(List<User> users) { // 实现xml信息序列化的一个对象 XmlSerializer serializer = Xml.newSerializer(); StringWriter writer = new StringWriter(); try { // xml数据经过序列化后保存到String中,然后将字符串通过OutputStream保存为xml文件 serializer.setOutput(writer); // 文档开始 serializer.startDocument("utf-8", true); // 开始一个节点 serializer.startTag("", "users"); // 开始一个子节点 for (User user : users) { serializer.startTag("", "user"); serializer .attribute("", "id", String.valueOf(user.getUserId())); serializer.startTag("", "name"); serializer.text(user.getUserName()); serializer.endTag("", "name"); serializer.startTag("", "pwd"); serializer.text(user.getPassword()); serializer.endTag("", "pwd"); serializer.startTag("", "info"); serializer.text(String.valueOf(user.getInfo())); serializer.endTag("", "info"); serializer.endTag("", "user"); } serializer.endTag("", "users"); // 关闭文档 serializer.endDocument(); } catch (Exception e) { e.printStackTrace(); } return writer.toString(); } public boolean writeToXml( String str,String filePat) { System.out.println("run==>writeToXml"); OutputStream out = null; try { String dirPath = Environment.getExternalStorageDirectory() .toString() + "/xml"; File dir = new File(dirPath); if (!dir.exists()) dir.mkdir(); File f = new File(dirPath +"/"+ filePat); System.out.println(dirPath +"/"+ filePat); out = new FileOutputStream(f); } catch (Exception e) { System.out.println("Error"+e.getMessage()); return false; } OutputStreamWriter outw = new OutputStreamWriter(out); try { outw.write(str); outw.close(); out.close(); } catch (Exception e) { return false; } return true; }}

src/B.Unit/Activity014.java

package B.P1;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.List;import javax.xml.parsers.FactoryConfigurationError;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.SAXException;import B.Unit.SaxDoc;import B.Unit.SaxWriteXml;import B.Unit.User;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.os.Environment;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class Activity014 extends Activity {private EditText userid, username, password, info;private Button toXml, readXml; @Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.main014); userid = (EditText) findViewById(R.id.userid); username = (EditText) findViewById(R.id.username); password = (EditText) findViewById(R.id.password); info = (EditText) findViewById(R.id.info); toXml = (Button) findViewById(R.id.toXml); toXml.setOnClickListener(toXmlClick); readXml = (Button) findViewById(R.id.readXml); readXml.setOnClickListener(readXmlClick); } OnClickListener toXmlClick = new OnClickListener() { @Overridepublic void onClick(View v) { System.out.println("toXmlButton onclick");// 用户Id必须填入一个数字否则会出现转换数字异常 String id = userid.getText().toString(); String user = username.getText().toString(); String pwd = password.getText().toString(); String _info = info.getText().toString(); User u = new User(); u.setUserId(new Integer(id)); u.setUserName(user); u.setPassword(pwd); u.setInfo(_info);// 如果有多个User对象,可以继续添加 List<User> list = new ArrayList<User>(); list.add(u); SaxWriteXml sax = new SaxWriteXml(); String strXml = sax.writeUserInfoToString(list); System.out.println(strXml); sax.writeToXml(strXml, "user.xml"); Toast.makeText(getApplicationContext(),"write to xml file successful ", Toast.LENGTH_SHORT).show(); } }; OnClickListener readXmlClick = new OnClickListener() { @Overridepublic void onClick(View v) { System.out.println("readXmlButton onclick"); SaxDoc sax = new SaxDoc(); SAXParser sp = null;try { sp = SAXParserFactory.newInstance().newSAXParser(); } catch (ParserConfigurationException e) {// TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) {// TODO Auto-generated catch block e.printStackTrace(); } catch (FactoryConfigurationError e) {// TODO Auto-generated catch block e.printStackTrace(); }// 解析user.xml文件 File f = new File(Environment.getExternalStorageDirectory() .toString() + "/xml/user.xml"); System.out.println(Environment.getExternalStorageDirectory() .toString() + "/xml/user.xml");if (!f.exists()) { Toast.makeText(getApplicationContext(), "not exist user.xml ", Toast.LENGTH_SHORT).show();return; }try { sp.parse(f, sax); System.out.println("sp.parse(f, sax);"); } catch (SAXException e) {// TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) {// TODO Auto-generated catch block e.printStackTrace(); }// 解析user.xml后,获取返回list的user数据 List<User> list = sax.getUserList();// 目前只有一个User对象 User user = list.get(0);int r_userid = user.getUserId(); String r_username = user.getUserName(); String r_password = user.getPassword(); String r_info = user.getInfo(); System.out.println("r_userid" + r_userid); System.out.println("r_username" + r_username); System.out.println("r_password" + r_password); System.out.println("r_info" + r_info); Intent intent = new Intent(Activity014.this, Activity014Read.class); Bundle map = new Bundle(); map.putSerializable("r_userid", r_userid); map.putSerializable("r_username", r_username); map.putSerializable("r_password", r_password); map.putSerializable("r_info", r_info); intent.putExtra("user", map); startActivity(intent); } };}

src/B.Unit/Activity014Read.java

View Code package B.P1;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class Activity014Read extends Activity {private TextView userid, username, password, info; @Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.read);int _userid = this.getIntent().getBundleExtra("user") .getInt("r_userid"); String _username = this.getIntent().getBundleExtra("user") .getString("r_username"); String _password = this.getIntent().getBundleExtra("user") .getString("r_password"); String _info = this.getIntent().getBundleExtra("user") .getString("r_info"); userid = (TextView) findViewById(R.id.r_userid); username = (TextView) findViewById(R.id.r_username); password = (TextView) findViewById(R.id.r_password); info = (TextView) findViewById(R.id.r_info); System.out.println("_userid" + _userid); System.out.println("_username" + _username); System.out.println("_password" + _password); System.out.println("_info" + _info); userid.setText(String.valueOf(_userid)); username.setText(_username); password.setText(_password); info.setText(_info); }}

转载于:https://www.cnblogs.com/xiaobuild/archive/2011/08/25/2153315.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)