最初の 2 つの記事では、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 // 解析事件,并将它们转换为结果树 Result TransformerHandler 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>
上記は Android sax で作成された XML ファイルの内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) をご覧ください。