Android之SAX解析Xml檔案實現

來源:互聯網
上載者:User
public class JokeBean {
private String id;
private String title;
private StringBuilder text=new StringBuilder();
public JokeBean(){
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public String getText() {
return text.toString();
}

public void setText(String text) {
this.text.append(text);
}
}

然後是解析類,繼承DefaultHandler類:

public class SAXHandler extends DefaultHandler{
private static final String TAG = "SAXHandler";
private List<JokeBean> data;
private JokeBean joke;
private String preTAG;

private static final String JOKE="joke";
private static final String JOKE_ID="id";
private static final String JOKE_TITLE="title";
private static final String JOKE_TEXT="text";

public SAXHandler(List<JokeBean> data){
super();
this.data = data;
}

@Override
public void startDocument() throws SAXException {
if(data==null)
data=new ArrayList<JokeBean>();
Log.d(TAG, "startDocument ------- :");
super.startDocument();
}
@Override
public void endDocument() throws SAXException {
Log.d(TAG, "endDocument ------- :");
super.endDocument();
}

@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
Log.d(TAG, "endDocument ------- :localName "+localName);

preTAG = localName;
if(JOKE.equals(localName)){
joke=new JokeBean();
}

super.startElement(uri, localName, qName, attributes);
}

@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
preTAG = "";
if(JOKE.equals(localName)){
data.add(joke);
Log.d(TAG, "endElement ------- :一個解析對象完成 。。。。 ");
}
super.endElement(uri, localName, qName);
}

@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
String info = new String(ch,start,length);
Log.d(TAG, "characters ------- : info" +info);
if(preTAG.equals(JOKE_ID)){
joke.setId(info);
}else if(preTAG.equals(JOKE_TITLE)){
joke.setTitle(info);
}else if(preTAG.equals(JOKE_TEXT)){
joke.setText(info);
}
super.characters(ch, start, length);
}

public List<JokeBean> getdata(){
return data;
}
}

封裝解析xml的工具類,方便用戶端調用:

public class XMLUtil {

public static List<JokeBean> parserXML(Context context,int rawId){
List<JokeBean> data = new ArrayList<JokeBean>();
SAXParserFactory factory=SAXParserFactory.newInstance();
XMLReader reader;
try {
reader = factory.newSAXParser().getXMLReader();
reader.setContentHandler(new SAXHandler(data));
InputSource is = new InputSource(context.getResources().openRawResource(rawId));
is.setEncoding("utf-8");
reader.parse(is);
} catch (Exception e) {
e.printStackTrace();
}
return data;
}
}

用戶端主類代碼:

public class MainActivity extends Activity implements OnClickListener {
/** Called when the activity is first created. */
Button btnSAX, btnOutput;
EditText memo;
private List<JokeBean> data;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
memo = (EditText)findViewById(R.id.EditText01);
findViewById(R.id.btnOutput).setOnClickListener(this);
}

public void onClick(View v) {
if(v.getId()==R.id.btnOutput){
mHandler.post(new Runnable() {
public void run() {
data=XMLUtil.parserXML(MainActivity.this,R.raw.joke2);
memo.setText(data.get(0).getText());
}
});
}
}
private Handler mHandler = new Handler();
}

xml的格式:

<?xml version="1.0" encoding="UTF-8" ?> 
<jokes>
<joke>
<id>1</id>
<title>笑話一</title>
<text><![CDATA[我愛人民]]></text>
</joke>
</jokes>

參考:

http://blog.csdn.net/boyupeng/article/details/6304827

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.