我有一个项目,包括读取1000个XML文件,每个文件定义处理不同类型数据的规则。结果是应用程序在启动时需要几秒钟才能加载XML文件。这是一个Android移动应用程序,所以CPU不是很强大。
有没有办法在编译时通过读取这些XML文件来创建静态对象?如果我可以通过定义已经读入XML的静态对象来预处理XML,那么应用程序应该能够以更快的速度开始加载。 XML文件在运行时无法更改的缺点是可以接受的。
这是一个通用的问题 - 我不一定会使用任何特定的方法或库。任何允许我预先解析XML的东西都可以。但是当评论询问我当前的运行时解析实现时,我在以下段落中提供它,它使用Java附带的DOM解析器。
目前的实施:
XML处理类只是通过读取每个XML文件来创建对象。它的使用方式如下:
lst.add(XMLData(new FileInputStream(new File("assets/001.xml"))));
lst.add(XMLData(new FileInputStream(new File("assets/002.xml"))));
....
其中XMLData是读取XML文件并保留相关信息的对象。 lst
是List
个此类对象。
XMLData类如下所示:
class XMLDAta {
public XMLData(InputStream xml) throws IOException, SAXException {
DocumentBuilder dBuilder;
try {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
dBuilder = dbFactory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
// TODO: if schema has problems (e.g. defined twice).
// all XML well-formedness were checked before shipping them
e.printStackTrace(); // shouldn't happen
return;
}
Document xml = dBuilder.parse(xmlAsset);