前兩篇文章,對sax解析xml的方式簡單說明,實現解析的功能。下面用sax來建立xml檔案。
具體的如何使用sax建立xml,在程式中都加了相關的注釋,還是直接上代碼.
package cn.com.sax;import java.io.OutputStream;import java.io.StringWriter;import javax.xml.transform.OutputKeys;import javax.xml.transform.Result;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerConfigurationException;import javax.xml.transform.sax.SAXTransformerFactory;import javax.xml.transform.sax.TransformerHandler;import javax.xml.transform.stream.StreamResult;import org.xml.sax.SAXException;import org.xml.sax.helpers.AttributesImpl;import android.util.Log;class SxaCreateXml {/** * SAX方式產生XML * * @param list * @return */public String saxToXml(OutputStream output) {String xmlStr = null;try {// 用來產生XML檔案// 實現此介面的對象包含構建轉換結果樹所需的資訊Result resultXml = new StreamResult(output);// 用來得到XML字串形式// 一個字元流,可以用其回收在字串緩衝區中的輸出來構造字串StringWriter writerStr = new StringWriter();// 構建轉換結果樹所需的資訊。Result resultStr = new StreamResult(writerStr);// 建立SAX轉換工廠SAXTransformerFactory sff = (SAXTransformerFactory) SAXTransformerFactory.newInstance();// 轉換處理器,偵聽 SAX ContentHandler// 解析事件,並將它們轉換為結果樹 ResultTransformerHandler th = sff.newTransformerHandler();// 將源樹轉換為結果樹Transformer transformer = th.getTransformer();// 設定字元編碼transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");// 是否縮排transformer.setOutputProperty(OutputKeys.INDENT, "yes");// 設定與用於轉換的此 TransformerHandler 關聯的 Result// 註:這兩個th.setResult不能同時啟用 th.setResult(resultXml);// th.setResult(resultStr);//建立根項目<calsses>,並設定其屬性為空白th.startDocument();AttributesImpl attr = new AttributesImpl();th.startElement("", "calsses", "calsses", attr);//建立一級子項目<group>,並設定其屬性attr.clear();attr.addAttribute("","name", "name", "", "一年級");attr.addAttribute("","num", "num", "", "10");th.startElement("", "", "group", attr);//建立二級子項目<person>,並設定其屬性attr.clear();attr.addAttribute("","name", "name", "", "小明");attr.addAttribute("","age", "age", "", "7");th.startElement("", "", "person", attr);//建立三級子項目<chinese>,並設定其值attr.clear();th.startElement("", "", "chinese", attr);th.characters("語文90".toCharArray(), 0, "語文90".length());th.endElement("", "", "chinese");//建立三級子項目<english>,並設定其值th.startElement("", "", "english", attr);th.characters("英語80".toCharArray(), 0, "英語80".length());th.endElement("", "", "english");th.endElement("", "", "person");th.endElement("", "", "group");th.endElement("", "calsses", "calsses");th.endDocument();xmlStr = writerStr.getBuffer().toString();} catch (TransformerConfigurationException e) {Log.e("TEST", ""+e.toString());} catch (SAXException e) {Log.e("TEST", ""+e.toString());} catch (Exception e) {Log.e("TEST", ""+e.toString());}Log.e("TEST","產生的"+xmlStr);return xmlStr;}}
調用這個方法即可實現建立xml檔案的目的。
new SxaCreateXml().saxToXml(openFileOutput("sax.xml", Context.MODE_PRIVATE));
產生的sax.xml檔案還是在data/data/cn.xxx.xxx/files檔案夾下。
<?xml version="1.0" encoding="UTF-8"?>
<calsses><group name="一年級" num="10"><person name="小明" age="7"><chinese>語文90</chinese><english>英語80</english></person></group></calsses>
以上就是用sax產生xml檔案。
加上前兩篇文章的程式源碼位置,需要的可以下載:http://download.csdn.net/detail/nxh_love/3970572