首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

Android拔高第七篇之XML解析与生成[转]

2012-06-27 
Android提高第七篇之XML解析与生成[转]?? ? ? 本文使用SAX来解析XML,在Android里面可以使用SAX和DOM,DOM需

Android提高第七篇之XML解析与生成[转]

?

? ? ? 本文使用SAX来解析XML,在Android里面可以使用SAX和DOM,DOM需要把整个XML文件读入内存再解析,比较消耗内存,而SAX基于事件驱动的处理方式,可以在各节点触发回调函数,不过SAX适合节点结构简单的XML文档,复杂的XML文档在后期的节点深度处理会有点麻烦。

本文要解析的test.xml文件如下:

?

?

?

解析如上XML的结果如下:

?Android拔高第七篇之XML解析与生成[转]

使用SAX解析,需要定义SAXParserFactory(使应用程序能够配置和获取基于 SAX 的解析器以解析 XML 文档),SAXParser(从各种输入源解析 XML),XMLReader(使用回调函数读取 XML 文档),其中XMLReader是个关键。XMLReader可以为解析XML定义各种回调函数,“条件符合”的时候触发这些回调函数。

?

上图是读取各节点之后,使用XmlSerializer重新组合并输出XML字符串。

本文的main.xml代码如下:

?

?

?

SAXHandler.java的源码如下:

?

package com.testSAX;    import java.io.StringWriter;    import javax.xml.parsers.SAXParser;  import javax.xml.parsers.SAXParserFactory;    import org.xml.sax.InputSource;  import org.xml.sax.XMLReader;  import org.xmlpull.v1.XmlSerializer;    import android.app.Activity;  import android.os.Bundle;    import android.util.Xml;  import android.view.View;  import android.widget.Button;  import android.widget.EditText;    public class testSAX extends Activity {      /** Called when the activity is first created. */      Button btnSAX, btnOutput;      EditText memo;      SAXHandler handler = new SAXHandler();              @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.main);          btnSAX = (Button) this.findViewById(R.id.btnSAX);          btnSAX.setOnClickListener(new ClickEvent());          btnOutput = (Button) this.findViewById(R.id.btnOutput);          btnOutput.setOnClickListener(new ClickEvent());          memo = (EditText) this.findViewById(R.id.EditText01);        }        class ClickEvent implements View.OnClickListener {            @Override          public void onClick(View v) {              if (v == btnSAX) {//解析XML,并保存标记,属性等值                  try {                      SAXParserFactory factory = SAXParserFactory.newInstance();                      SAXParser parser = factory.newSAXParser();                      XMLReader reader = parser.getXMLReader();                      reader.setContentHandler(handler);                      reader.parse(new InputSource(testSAX.this.getResources()                              .openRawResource(R.raw.test)));                  } catch (Exception ee) {}              }              else if (v == btnOutput) {//生成XML                  try {                      XmlSerializer serializer = Xml.newSerializer();                      StringWriter writer = new StringWriter();                      try {                          serializer.setOutput(writer);                          serializer.startDocument("UTF-8",true);                                                    for(int i=0;i<handler.GetKeys().size();i++)                          {                              if(handler.GetKeys().get(i).equals("startTag"))                              {                                  serializer.startTag("", (String) handler.GetValues().get(i));                              }                              else if(handler.GetKeys().get(i).equals("Attr")){                                  String[] str= (String[]) handler.GetValues().get(i);                                  serializer.attribute("",str[0],str[1]);                              }                              else if(handler.GetKeys().get(i).equals("text"))                                  serializer.text((String)handler.GetValues().get(i));                              else if(handler.GetKeys().get(i).equals("endTag"))                              {                                  serializer.endTag("", (String) handler.GetValues().get(i));                              }                          }                          serializer.endDocument();                          String text=writer.toString();                          text=text.replace("><", ">/r/n<");                          memo.setText(text);//输出到文本框                      } catch (Exception e) {                          throw new RuntimeException(e);                      }                                        } catch (Exception e) {}              }            }        }  } 

?

本文来自http://blog.csdn.net/hellogv/article/details/6004624

?

?

热点排行