2013-01-22 70 views
0

在我的android應用程序中,我使用一個xml文件在應用程序中存儲一些歷史信息。Android數據存儲在XML文件

以下是我用於輸入文件新記錄的代碼。

String filename = "file.xml"; 
File xmlFilePath = new File("/data/data/com.testproject/files/" + filename); 

private void addNewRecordToFile(History history) 
{ 
    try 
    { 
     DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder docBuilder = dbfac.newDocumentBuilder(); 
     Document doc = docBuilder.parse(xmlFilePath);  

     Element rootEle = doc.getDocumentElement();                    

     Element historyElement = doc.createElement("History");       
     rootEle.appendChild(historyElement);           

     Element customerEle = doc.createElement("customer");       
     customerEle.appendChild(doc.createTextNode(history.getCustomer()));    
     historyElement.appendChild(customerEle);          

     Element productEle = doc.createElement("product");        
     productEle.appendChild(doc.createTextNode(history.getProduct()));     
     historyElement.appendChild(productEle);           

     //--------> 
     DOMSource source = new DOMSource(doc);           

     TransformerFactory transformerFactory = TransformerFactory.newInstance();  
     Transformer transformer = transformerFactory.newTransformer();     
     transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
     transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); 
     StreamResult result = new StreamResult(xmlFilePath);       
     transformer.transform(source, result); 
    } 
    catch (ParserConfigurationException e) 
    { 
     Log.v("State", "ParserConfigurationException" + e.getMessage()); 
    } 
    catch (SAXException e) 
    { 
     Log.v("State", "SAXException" + e.getMessage()); 
    } 
    catch (IOException e) 
    { 
     Log.v("State", "IOException" + e.getMessage()); 
    } 
    catch (TransformerConfigurationException e) { 
     e.printStackTrace(); 
    } 
    catch (TransformerFactoryConfigurationError e) { 
     e.printStackTrace(); 
    } 
    catch (TransformerException e) { 
     e.printStackTrace(); 
    } 
} 

XML文件格式

<?xml version="1.0" encoding="UTF-8"?> 
<HistoryList> 
    <History> 
    <customer>Gordon Brown Ltd</customer> 
    <product>Imac</product> 
    </History> 
    <History> 
    <customer>GG Martin and Sons</customer> 
    <product>Sony Vaio</product> 
    </History> 
    <History> 
    <customer>PR Thomas Ltd</customer> 
    <product>Acer Laptop</product> 
    </History> 
</HistoryList> 

所以使用此代碼我可以成功添加一個新的rocord到文件中。但是我的android的最低目標版本應該是API級別4.此代碼適用於API Level 8及更高版本。

DOMSource的的TransformerFactory類不低於8.因此所有的東西在Android的API級別提供的評論// --------前>作品的API低於8

有沒有人知道我可以寫入xml文件的任何方式,而無需使用Transformer API。在此先感謝...

EDITS .....

在我來說,我必須使用XML文件來存儲信息。這就是爲什麼我不尋找共享首選項或Sqlite DB來存儲數據。謝謝。

回答

0

也許你應該存儲這個信息是SharedPreferences而不是?如果你有一個特定的原因,你爲什麼試圖把它寫入XML,那沒問題。否則,我會建議在Android中使用不同的持久化方法 - 因爲有一些內置的方法可以更容易地處理XML。

+0

根據要求,我必須將信息存儲在XMl文件中。我無法使用Sqlite或sharedpreferences。這就是爲什麼我正在尋找存儲在一個XML文件中...是不是可以用android中的xml文件來做到這一點? – JibW

+0

是的,這是可能的,但過於複雜(正如你正在經歷)。持久數據的首選方式是SQLLite或SharedPrefs。祝你好運。 – Booger