2013-04-13 77 views
0

基本上我創建的Android遊戲和想節省一些數據被保存在文件夾中的資產和一個XML文件級別我分析他們喜歡:創建,寫作和閱讀Android中的XML文件

final SAXParserFactory spf = SAXParserFactory.newInstance(); 
final SAXParser sp = spf.newSAXParser(); 
final XMLReader xmlReader = sp.getXMLReader(); 
final XMLParser pXMLParser = new XMLParser();//My own created Class 
xmlReader.setContentHandler(pXMLParser); 
InputStream inputStream = Z.act.getAssets().open("levels/" + PackName + ".xml"); 
xmlReader.parse(new InputSource(new BufferedInputStream(inputStream))); 
return pXMLParser.getParsedLevel(); 

事情是正確的,直到那時,我成功地能夠創建和保存XML文件。但不是太多,我也想創建一個關卡編輯器。我能夠只使用類似

創建XML (String中的數據類型)(有各種「字符串+ =」,在基於從關卡編輯器活動/場景調用不同的方法):

String XMLString = ""; 
XMLString += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; 
.... 
XMLString += " </" + tagEnemy + ">"; // tagEnemy is a variable string I created 

現在我很困惑如果這是正確的或者我應該如何動態地以XML格式(或任何方便的形式)創建它,以及在哪裏保存(可能是內部或外部存儲在android中)應該是最好的。因爲我嘗試了很多代碼碎片從谷歌上找到很多東西我的代碼很多後,這可能是無用的,不工作,但如果你說我可以添加它。謝謝你的幫助。

+0

ü也可以使用Maven庫序列化和Android的反序列化XML它很容易 –

回答

1

試試我的代碼是從資產/ URL

public class SaxParserTest extends DefaultHandler { 
    Boolean currentElement = false; 
    String currentValue = null; 
    ArrayList<HashMap<String, Object>> datalist = new ArrayList<HashMap<String, Object>>(); 
    HashMap<String, Object> temp; 
    public ArrayList<HashMap<String, Object>> getData(Context context){ 
     try { 
      SAXParserFactory saxparser = SAXParserFactory.newInstance(); 
      SAXParser parser = saxparser.newSAXParser(); 
      XMLReader xmlReader = parser.getXMLReader(); 
      xmlReader.setContentHandler(SaxParserTest.this); 
      /* 
      * used when pick local data 
      */ 
//    InputStream is =context.getAssets().open("data.xml"); 
//    xmlReader.parse(new InputSource(is)); 
      /* 
      * used when pick data from url 
      */ 
      URL url = new URL("http://www.xmlfiles.com/examples/cd_catalog.xml"); 
      xmlReader.parse(new InputSource(url.openStream()));  
     } catch (Exception e) { 
      e.getMessage(); 
     } 
     return datalist; 
    } 

    @Override 
    public void startElement(String uri, String localName, String qName, 
      Attributes attributes) throws SAXException { 
     super.startElement(uri, localName, qName, attributes); 
     if (localName.equalsIgnoreCase("CD")) { 
      temp=new HashMap<String, Object>(); 
      temp.put(Constant.id, attributes.getValue(Constant.id)); 
//   temp.put(Constant.title, attributes.getValue(Constant.title)); 
//   temp.put(Constant.artist, attributes.getValue(Constant.artist)); 
//   temp.put(Constant.country, attributes.getValue(Constant.country)); 
//   temp.put(Constant.company, attributes.getValue(Constant.company)); 
//   temp.put(Constant.price, attributes.getValue(Constant.price)); 
//   temp.put(Constant.year, attributes.getValue(Constant.year)); 
     } 
    } 

    @Override 
    public void characters(char[] ch, int start, int length) 
      throws SAXException { 
     super.characters(ch, start, length); 
      currentValue = new String(ch, start, length); 
    } 

    @Override 
    public void endElement(String uri, String localName, String qName) 
      throws SAXException { 
     super.endElement(uri, localName, qName); 
     if(localName.equals(Constant.title)) 
     temp.put(Constant.title, currentValue); 
     if(localName.equals(Constant.artist)) 
     temp.put(Constant.artist, currentValue); 
     if(localName.equals(Constant.country)) 
     temp.put(Constant.country, currentValue); 
     if(localName.equals(Constant.company)) 
     temp.put(Constant.company, currentValue); 
     if(localName.equals(Constant.price)) 
     temp.put(Constant.price, currentValue); 
     if(localName.equals(Constant.year)) 
     temp.put(Constant.year, currentValue); 
     if(localName.equalsIgnoreCase("CD")) 
      datalist.add(temp); 
     Log.i("DataList", datalist.toString()); 

    } 
} 

分析數據,並使用該像

SaxParserTest test=new SaxParserTest(); 
      datal=test.getData(this); 
      SimpleAdapter adapter = new SimpleAdapter(MainActivity.this, datal, 
        R.layout.activity_main, new String[] { Constant.title, 
          Constant.artist, Constant.price, Constant.year, 
          Constant.company, Constant.country ,Constant.id}, new int[] { 
          R.id.txt1, R.id.txt2, R.id.txt3, R.id.txt4, 
          R.id.txt5, R.id.txt6 ,R.id.txt7}); 
      setListAdapter(adapter); 
+0

當然這是有用的,我已經實現了有點類似的方法,但正如我所說'最終XMLParser pXMLParser =新的XMLParser(); //我自己創建的類' 我可以解析,但有問題保存和打開這樣的。我會看到maven,thnx。 – RE60K