国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

XML文件的使用詳細解析

2020-02-21 17:37:27
字體:
來源:轉載
供稿:網友

  今天小編跟大家分享一篇XML文件的使用詳細解析,感興趣的朋友跟小編一起來了解一下吧!

  前言

  本文主要介紹在Android中怎樣來解析XML文件。主要采用的是SAX機制,SAX全稱為Simple API for XML,它既是一種接口,也是一個軟件包。作為接口,SAX是事件驅動型XML解析的一個標準接口。XML文件解析一般有2種方法,DOM和SAX。其中DOM需要先將xml文檔全部讀入到電腦內存中,當文檔內容太大時,該方法并不適用。SAX就比較好的解決了該問題,它是逐行解析的,可以隨時中斷。但是SAX的操作比較復雜。因此,這2種方法各有優缺點,看具體應用情況。在前面的文章Qt學習之路_12(簡易數據管理系統)中使用的是Qt中的DOM方法。

  實驗說明

  大多數SAX實現都會產生類似下面的事件:

  在文檔的開始和結束處觸發文檔處理事件;在文檔內每一XML元素結束解析的前后觸發元素事件;任何元數據通常豆油單獨的事件交付;在處理文檔的DTD或者Schema時產生DTD 或者Schema事件;產生錯誤事件用來通知主機應用程序解析錯誤。

  SAX模型示意圖如下所示:

  如果要用SAX來解析xml文檔,則需要一個類來繼承android系統提供的ContentHandler類。但是如果繼承ContentHandler這個類, 即使你不使用這個類提供的所有方法,你也必須實現其內部的所有方法(一般情況下沒有使用的方法可以直接用空方法代替),但是這樣開發起來不是很方便。因此我們可以改為繼承DefaultHandler這個類,這樣的話我們只需要實現程序中所需要的方法即可,其它的方法這個類內部其實已經用空方法代替了。

  ContentHandler接口的方法有以下幾種:

  void startDocument();//文檔解析開始時執行

  void endDocument();//文檔解析結束時執行

  void startElement(String uri, String localName, String qName, Attributes atts);//標簽開始解析時執行

  void endElement(String uri, String localName, String qName, Attributes atts);//標簽解析結束時執行

  void characters(char[] ch, int start, int length );//解析標簽屬性時執行

  android中使用SAX來解析xml文件,需先建立一個SAX工廠,即SAXParserFactory對象,還需建立一個XMLReader對象,該類綁定ContentHandler子類,且與xml源文件結合在一起。即其處理過程為創建事件處理程序,創建SAX解析器,鍵事件處理程序分配給解析器,對文檔進行解析,將每個事件發送給處理程序。

  判斷String類型的值是否相等采用的是String類的equal方法。

  本實驗是解析一段xml代碼,然后在上面每個解析函數中打印一些內容。主要是學會怎么使用SAX模型來來創建解析器,怎樣使用ContentHandler子類的函數來進行解析。

  實驗主要部分代碼:

  Mainactivity.java:

  復制代碼 代碼如下:

  package com.example.xml;

  import java.io.StringReader;

  import javax.xml.parsers.SAXParserFactory;

  import org.xml.sax.InputSource;

  import org.xml.sax.XMLReader;

  import android.app.Activity;

  import android.os.Bundle;

  import android.view.Menu;

  import android.view.View;

  import android.view.View.OnClickListener;

  import android.widget.Button;

  import android.widget.TextView;

  public class MainActivity extends Activity {

  private Button start = null;

  private TextView display = null;

  @Override

  public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.activity_main);

  start = (Button)findViewById(R.id.start);

  start.setOnClickListener(new StartOnClickListener());

  }

  public class StartOnClickListener implements OnClickListener{

  public void onClick(View v) {

  // TODO Auto-generated method stub

  //注意2點,第1:字符串中如果要換行寫,則應該用引號和加號來相加得到,不能直接換行寫

  //第2點:如果字符串中有字符,則用括號里面的符合(/")代替引號。

  //我這里用的xml文件直接為該程序layout的布局xml文件

  // String result_str =

  // "

  // " xmlns:tools=/"http://schemas.android.com/tools/" " +

  // " android:layout_width=/"match_parent/" " +

  // " android:layout_height=/"match_parent/" > " +

  //

  // "

  // " android:layout_width=/"fill_parent/" " +

  // " android:layout_height=/"wrap_content/" " +

  // " android:layout_alignParentBottom=/"true/" " +

  // " android:text=/"Start XML Parse/" " +

  // " /> " +

  // "

  // " android:id=/"@+id/display/" " +

  // " android:layout_width=/"fill_parent/" " +

  // " android:layout_height=/"fill_parent/" " +

  // " android:gravity=/"center/" " +

  // " android:layout_alignParentLeft=/"true/" " +

  // " android:layout_above=/"@+id/start/" " +

  // " android:text=/"The XML Parse Example!!/" " +

  // " /> " +

  // " ";

  String result_str =

  "

  " layoutwidth=/"fillparent/" " +

  " layoutheight=/"wrapcontent/" " +

  " layoutalignParentBottom=/"true/" " +

  " text=/"Start XML Parse/" " +

  "

" ;

  System.out.println(result_str);

  try{

  //創建SAX工廠

  SAXParserFactory factory = SAXParserFactory.newInstance();

  XMLReader reader = factory.newSAXParser().getXMLReader();

  reader.setContentHandler(new MyContentHandler());

  reader.parse(new InputSource(new StringReader(result_str)));

  }

  catch(Exception e) {

  e.printStackTrace();

  }

  }

  }

  @Override

  public boolean onCreateOptionsMenu(Menu menu) {

  getMenuInflater().inflate(R.menu.activity_main, menu);

  return true;

  }

  }

  MyContentHandler.java:

  復制代碼 代碼如下:

  package com.example.xml;

  import org.xml.sax.Attributes;

  import org.xml.sax.SAXException;

  import org.xml.sax.helpers.DefaultHandler;

  public class MyContentHandler extends DefaultHandler {

  String tagname, sid, swidth, sheight, text, salign;

  //當解析到標簽的屬性欄時調用該方法

  @Override

  public void characters(char[] ch, int start, int length)

  throws SAXException {

  // TODO Auto-generated method stub

  if(tagname.equals("id"))

  sid = new String(ch, start, length);

  else if(tagname.equals("layoutwidth"))

  swidth = new String(ch, start, length);

  else if(tagname.equals("layoutheight"))

  sheight = new String(ch, start, length);

  else if(tagname.equals("layoutalignParentBottom"))

  salign = new String(ch, start, length);

  else if(tagname.equals("text"))

  text = new String(ch, start, length);

  super.characters(ch, start, length);

  }

  //解析文檔結束調用

  @Override

  public void endDocument() throws SAXException {

  // TODO Auto-generated method stub

  System.out.println("........end.......");

  super.endDocument();

  }

  //解析標簽結束時調用

  @Override

  public void endElement(String uri, String localName, String qName)

  throws SAXException {

  // TODO Auto-generated method stub

  if(tagname.equals("Button")) {

  this.printout();

  }

  super.endElement(uri, localName, qName);

  }

  //解析文檔開始時調用

  @Override

  public void startDocument() throws SAXException {

  // TODO Auto-generated method stub

  System.out.println("........begin.......");

  super.startDocument();

  }

  //標簽開始時執行

  @Override

  public void startElement(String uri, String localName, String qName,

  Attributes attributes) throws SAXException {

  // TODO Auto-generated method stub

  tagname = localName;

  if(tagname.equals("Button")) {

  for(int i = 0; i

  //得到第i個屬性的名字和值

  System.out.println(attributes.getLocalName(i) + "=" + attributes.getValue(i));

  }

  }

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

  }

  //輸出標簽屬性解析結果

  private void printout() {

  System.out.print("id: ");

  System.out.println(sid);

  System.out.print("layout_width: ");

  System.out.println(swidth);

  System.out.print("layout_height: ");

  System.out.println(sheight);

  System.out.print("layout_alignParentBottom: ");

  System.out.println(salign);

  System.out.print("text: ");

  System.out.println(text);

  }

  }

  以上就是XML文件的使用詳細解析了,更多相關內容請繼續關注武林技術頻道。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 门源| 北宁市| 醴陵市| 龙岩市| 汪清县| 调兵山市| 潢川县| 成武县| 余干县| 大安市| 邢台市| 治多县| 应用必备| 浠水县| 宣化县| 峨山| 绍兴县| 崇礼县| 阳朔县| 南丰县| 垣曲县| 民和| 黑河市| 海晏县| 隆安县| 亚东县| 山东省| 乌审旗| 鱼台县| 长子县| 宿迁市| 五华县| 宕昌县| 贡山| 裕民县| 宁远县| 托克逊县| 星子县| 普安县| 开江县| 高密市|