用xml持久化数据,如何实现一个xml阅读器?
Posted
技术标签:
【中文标题】用xml持久化数据,如何实现一个xml阅读器?【英文标题】:Persistent data with xml, how to implement an xml reader? 【发布时间】:2013-01-21 01:29:18 【问题描述】:我正在尝试使用“内部存储”的方法来保留我的数据。在下面的代码中,我试图将 xml 写入存储。这是正确的方法吗?我正在尝试使用 fileInputStream 打开此文件,但我看到的该类的唯一读取函数是 .read() ,它显然一次读取一个字节的数据。这对于读取 xml 文件似乎很不方便。我应该如何最好地读/写我的数据?
@Override
protected void onDestroy()
super.onDestroy();
try
FileOutputStream fos=openFileOutput(LOCALSTORAGEFILE,Context.MODE_PRIVATE);
XmlCreator create=new XmlCreator();
fos.write(create.subjectListToXml(subjectMasterList).getBytes());
fos.close();
catch (IOException ex)
Logger.getLogger(MainActivity.class.getName()).log(Level.SEVERE, null, ex);
public class XmlCreator
XmlSerializer serializer=Xml.newSerializer();
StringWriter writer=new StringWriter();
public String subjectListToXml(ArrayList<Subject> masterList)
try
serializer.setOutput(writer);
serializer.startDocument("UTF-8", true);
serializer.startTag("", "subjects");
serializer.attribute(null, null, null);
for(Subject subject:masterList)
serializer.endTag("","subject");
for(Cards card:subject.getCards())
serializer.startTag("","card");
serializer.startTag("","word");
serializer.text(card.getCardFront());
serializer.endTag("","word");
serializer.endTag("", "card");
serializer.endTag("", "subject");
serializer.endTag("","subjects");
serializer.endDocument();
catch(Exception e)
e.printStackTrace();
return writer.toString();
【问题讨论】:
你在代码中写了两次serializer.endTag("","subject");
,其中一个不应该写startTag
吗?
是的,谢谢,错过了。
【参考方案1】:
没有必要重新发明事物。考虑使用SharedPreferences。
如果您仍想使用您的 XML 格式并希望以正确的方式阅读它,这里有一些内容可以帮助您入门:
InputStream is = ...
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(is);
doc.getDocumentElement().normalize();
NodeList myTags = doc.getElementsByTagName("your_xml_tag");
我还强烈推荐 XML/JSON 库 Jackson 。它只需几行代码就可以读取和保存完整的对象。
【讨论】:
这不能只存储原始类型吗?我正在尝试存储对象 谢谢,我会调查一下 没错,SharedPreferences 不能很好地支持非原始类型,您可以制作一些方法将其包装到字符串/字符串集,但我认为 Jackson 是您正在寻找的。一旦您开始使用 Jackson,您很可能会爱上它!以上是关于用xml持久化数据,如何实现一个xml阅读器?的主要内容,如果未能解决你的问题,请参考以下文章
如何根据xml和schema文件生成java类(用程序实现)!