Android SAX解析与生成XML
来源:互联网 发布:淘宝什么叫发票抬头 编辑:程序博客网 时间:2024/04/29 12:25
用sax 来解析xml
main.xml
<?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="fill_parent" android:orientation="vertical" > <Button android:id="@+id/btnSaxXml" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="SAX解析XML" /> <Button android:id="@+id/btnOutXml" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="生成XML" /> <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="match_parent" android:text="@+id/editText" /></LinearLayout>
text.xml
<?xml version="1.0" encoding="utf-8"?><test> <title>Sax XML test</title> <content aa="1" bb="2"> <name>hotye</name> <url>http://www.baidu.com</url> </content></test>
SaxHander.java
import java.util.ArrayList;import java.util.List;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;import android.util.Log;public class SaxHander extends DefaultHandler {private List<String> keys = new ArrayList<String>();private List<Object> values = new ArrayList<Object>();@Overridepublic void characters(char[] ch, int start, int length) throws SAXException {String value = new String(ch, start, length);value = value.trim();keys.add("text");values.add(value);Log.e("text", value);}@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {// 保存开始标记keys.add("startTags");values.add(localName);Log.e("startTags", localName);// 保存属性值for (int i = 0; i < attributes.getLength(); i++) {keys.add("Attr");String[] str = new String[2];str[0] = attributes.getLocalName(i);str[1] = attributes.getValue(i);values.add(str);Log.e("Attr", str[0] + "=" + str[1]);}}@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {// 保存结束标记keys.add("endTags");values.add(localName);Log.e("endTags", localName);}@Overridepublic void startDocument() throws SAXException {super.startDocument();}@Overridepublic void endDocument() throws SAXException {super.endDocument();}public List<String> getKeys() {return keys;}public List<Object> getValues() {return values;}}
Android_XMLActivity.java
import java.io.IOException;import java.io.StringWriter;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.InputSource;import org.xml.sax.SAXException;import org.xml.sax.XMLReader;import org.xmlpull.v1.XmlSerializer;import android.app.Activity;import android.content.res.Resources.NotFoundException;import android.os.Bundle;import android.util.Xml;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;public class Android_XMLActivity extends Activity {Button btnSaxXml, btnOutXml;EditText editText;SaxHander saxHander = new SaxHander();@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);btnSaxXml = (Button) findViewById(R.id.btnSaxXml);btnOutXml = (Button) findViewById(R.id.btnOutXml);btnSaxXml.setOnClickListener(new ClickEvent());btnOutXml.setOnClickListener(new ClickEvent());editText = (EditText) findViewById(R.id.editText);}class ClickEvent implements OnClickListener {@Overridepublic void onClick(View v) {if (v == btnSaxXml) {try {SAXParserFactory factory = SAXParserFactory.newInstance();SAXParser saxParser = factory.newSAXParser();XMLReader xmlReader = saxParser.getXMLReader();xmlReader.setContentHandler(saxHander);xmlReader.parse(new InputSource(Android_XMLActivity.this.getResources().openRawResource(R.raw.test)));StringBuffer buffer = new StringBuffer();for (int i = 0; i < saxHander.getKeys().size(); i++) {if ("text".equals(saxHander.getKeys().get(i).toString()) && saxHander.getValues().get(i).toString().length()>1) {buffer.append(saxHander.getValues().get(i-1).toString() + "=" + saxHander.getValues().get(i).toString());buffer.append("\n");}}editText.setText(buffer);} catch (NotFoundException e) {e.printStackTrace();} catch (ParserConfigurationException e) {e.printStackTrace();} catch (SAXException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}} else if (v == btnOutXml) {try {XmlSerializer xmlSerializer = Xml.newSerializer();StringWriter stringWriter = new StringWriter();xmlSerializer.setOutput(stringWriter);xmlSerializer.startDocument("utf-8", true);for (int i = 0; i < saxHander.getKeys().size(); i++) {if (saxHander.getKeys().get(i).equals("startTags")) {xmlSerializer.startTag("", saxHander.getValues().get(i).toString());} else if (saxHander.getKeys().get(i).equals("Attr")) {String[] str = (String[]) saxHander.getValues().get(i);xmlSerializer.attribute("", str[0], str[1]);} else if (saxHander.getKeys().get(i).equals("text")) {xmlSerializer.text(saxHander.getValues().get(i).toString());} else if (saxHander.getKeys().get(i).equals("endTags")) {xmlSerializer.endTag("", saxHander.getValues().get(i).toString());}}xmlSerializer.endDocument();String text = stringWriter.toString();text = text.replace("><", ">\r\n<");editText.setText(text);} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalStateException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}}}
- Android SAX解析与生成XML
- Android-Sax解析与生成xml数据
- java解析与生成xml(二): SAX
- Android中的XML解析与生成——SAX解析XML
- android sax dom pull 解析xml 和生成xml
- android SAX解析XML
- Android SAX解析XML
- android SAX解析XML
- android xml-----Sax解析
- Android SAX解析XML
- Android SAX解析XML
- Android SAX解析XML
- Android SAX解析XML
- Android SAX 解析 XML
- Android SAX解析XML
- Android Sax解析xml
- android SAX解析XML
- android xml解析 sax
- 【CF啥时候改成文件输出了0 0】CodeForce 253A—boys and girls
- java读写word文档,完美解决方案
- [Fedora]: Google Chrome安装错误,lsb >= 4.0 is needed by google-chrome-stable-13.0.782.112-95650.i386
- NSArry 为静态数组,不能往里面添加元素 NSMutableArray 为动态数组,是NSArray 的子类
- LINUX 安装G++时遇到的问题
- Android SAX解析与生成XML
- aspx上传、预览图片
- 《Windows核心编程系列》十一谈谈Windows线程池
- oracle10g配置远程连接
- 小思
- 抽象类PublicPage封转一些页面常用方法
- NSArray和NSMutableArray的常用方法
- HMM学习笔记(1)
- Android开发学习笔记(一 )安卓开发环境搭建