1. 程式人生 > >Android 建立與解析XML(一)---- SAX方式

Android 建立與解析XML(一)---- SAX方式

 @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();
 }