Android 建立與解析XML(一)---- SAX方式
阿新 • • 發佈:2019-02-15
@Override
public String serialize(List<Book> books) throws Exception {
SAXTransformerFactory factory = (SAXTransformerFactory) TransformerFactory.newInstance();//取得SAXTransformerFactory例項
TransformerHandler handler = factory.newTransformerHandler();//從factory獲取TransformerFactory例項
Transformer transformer = handler.getTransformer();//從handler獲取Transformer例項
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");//設定輸出採用的編碼方式
transformer.setOutputProperty(OutputKeys.INDENT, "yes");//是否自動新增額外的空白
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");//是否忽略XML宣告
StringWriter writer = new StringWriter();
Result result = new StreamResult(writer);
handler.setResult(result);
String uri = "";//代表名稱空間的URI,當URI無值時,須設定為空字串
String localName = "";//名稱空間的本地名稱(不包含字首) 當沒有進行名稱空間處理時,須設定為空字串
handler.startDocument();
handler.startElement(uri, localName, "books", null);
AttributesImpl attrs = new AttributesImpl(); //負責存放元素的屬性資訊
char[] ch = null;
for(Book book : books){
attrs.clear();//清空屬性列表
attrs.addAttribute(uri, localName, "id", "string", String.valueOf(book.getId()));//新增一個名為id的屬性(type影響不大,這裡設為string)
handler.startElement(uri, localName, "book", attrs);//開始一個book元素 關聯上面設定的id屬性
handler.startElement(uri, localName, "name", null);//開始一個name元素 沒有屬性
ch = book.getName().toCharArray() ;
handler.characters(ch, 0, ch.length);//設定name元素的文字節點
handler.endElement(uri, localName, "name");
handler.startElement(uri, localName, "price", null);//開始一個price元素 沒有屬性
ch = String.valueOf(book.getPrice()).toCharArray() ;
handler.characters(ch, 0, ch.length);//設定price元素的文字節點
handler.endElement(uri, localName, "price");
handler.endElement(uri, localName, "book");
}
handler.endElement(uri, localName, "books");
handler.endDocument();
return writer.toString();
}
public String serialize(List<Book> books) throws Exception {
SAXTransformerFactory factory = (SAXTransformerFactory) TransformerFactory.newInstance();//取得SAXTransformerFactory例項
TransformerHandler handler = factory.newTransformerHandler();//從factory獲取TransformerFactory例項
Transformer transformer = handler.getTransformer();//從handler獲取Transformer例項
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");//設定輸出採用的編碼方式
transformer.setOutputProperty(OutputKeys.INDENT, "yes");//是否自動新增額外的空白
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");//是否忽略XML宣告
StringWriter writer = new StringWriter();
Result result = new StreamResult(writer);
handler.setResult(result);
String uri = "";//代表名稱空間的URI,當URI無值時,須設定為空字串
String localName = "";//名稱空間的本地名稱(不包含字首) 當沒有進行名稱空間處理時,須設定為空字串
handler.startDocument();
handler.startElement(uri, localName, "books", null);
AttributesImpl attrs = new AttributesImpl(); //負責存放元素的屬性資訊
char[] ch = null;
for(Book book : books){
attrs.clear();//清空屬性列表
attrs.addAttribute(uri, localName, "id", "string", String.valueOf(book.getId()));//新增一個名為id的屬性(type影響不大,這裡設為string)
handler.startElement(uri, localName, "book", attrs);//開始一個book元素 關聯上面設定的id屬性
handler.startElement(uri, localName, "name", null);//開始一個name元素 沒有屬性
ch = book.getName().toCharArray() ;
handler.characters(ch, 0, ch.length);//設定name元素的文字節點
handler.endElement(uri, localName, "name");
handler.startElement(uri, localName, "price", null);//開始一個price元素 沒有屬性
ch = String.valueOf(book.getPrice()).toCharArray() ;
handler.characters(ch, 0, ch.length);//設定price元素的文字節點
handler.endElement(uri, localName, "price");
handler.endElement(uri, localName, "book");
}
handler.endElement(uri, localName, "books");
handler.endDocument();
return writer.toString();
}