解析XML文档时创建的返回对象
问题描述:
所以我想从xml文件读取数据,我现在处于一个点,其中有XMLReader
和ContentHandler
,当endDocument()
被触发时,我已经“收集”了所有数据我需要从文件。解析XML文档时创建的返回对象
但现在看来,我撞上了墙...
如何退还所收集的数据(从ContentHandler
),以便它可以在我的应用程序中使用?
答
您可以在ContentHandler中创建一个List<T>
。
public class MyTextHandler implements ContentHandler {
....
private ArrayList<YourModel> list;
public MyTextHandler() {
list= new ArrayList<YourModel>();
}
public ArrayList<YourModel> getList() {
return list;
}
....
}
从处理程序获取列表:
MyTextHandler handler=new MyTextHandler();
reader.setContentHandler(handler);
InputSource is = new InputSource(filename);
reader.parse(is);
ArrayList<YourModel> list=handler.getList();
答
技术上...
你从A ContentHandler中并不真正“回归”的数据 - 内容处理程序的目的不是要满足任何特定的输入/输出合同。相反,它是应该对XML数据读取操作“起作用”的对象。一些ContentHandler可能不会与主机应用程序交互 - 例如,它们可能只是将数据输出到控制台。与此同时,其他人可能会将XML对象处理为bean,然后将这些bean序列化为数据库。
如果您希望您的应用程序直接“依赖”ContentHandler来创建对象,那么ContentHandler通常可能是应用程序中的一个子类,它访问应用程序的Model并将数据写入该模型。通过这里的“模型”,我指的是典型的MVC应用程序中的M。
实用答
ContentHandler接口是为了定义SAX解析器。该数据通常在调用endDocument()方法创建的,其中我们转储到数据库中的所有XML数据的行为,或作为打印报表。
正如其名称所暗示(`ContentHanlder`),这是一个处理程序。而且我们不会从处理程序返回,而是处理发生的一些事件。你可以在这里看到:http://docs.oracle.com/javase/1.4.2/docs/api/org/xml/sax/ContentHandler.html,所有方法的返回类型都是void。可以做的就是将它保存(或推送)到某处,或者在处理程序中做任何你需要做的事情。 – 2011-12-14 04:00:58
我现在已经意识到,我正在寻找一种优雅的方式来使用我的数据,并且告诉我的应用程序接下来要做什么。 – mstoppert 2011-12-14 04:08:55