[英]Creating ,Writing and Reading an XML File in Android
基本上,我正在创建一个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中的内部或外部存储)应该是最好的。因为我尝试了许多代码片段,在此之后在Google上找到许多我的代码的很多东西可能是无用的,无法正常工作,但是如果您说我可以添加它。谢谢您的帮助。
试试我的代码,它解析资产/ 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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.