2011-12-14 84 views
1

所以我想从xml文件读取数据,我现在处于一个点,其中有XMLReaderContentHandler,当endDocument()被触发时,我已经“收集”了所有数据我需要从文件。解析XML文档时创建的返回对象

但现在看来,我撞上了墙...

如何退还所收集的数据(从ContentHandler),以便它可以在我的应用程序中使用?

+1

正如其名称所暗示(`ContentHanlder`),这是一个处理程序。而且我们不会从处理程序返回,而是处理发生的一些事件。你可以在这里看到:http://docs.oracle.com/javase/1.4.2/docs/api/org/xml/sax/ContentHandler.html,所有方法的返回类型都是void。可以做的就是将它保存(或推送)到某处,或者在处理程序中做任何你需要做的事情。 – 2011-12-14 04:00:58

+0

我现在已经意识到,我正在寻找一种优雅的方式来使用我的数据,并且告诉我的应用程序接下来要做什么。 – mstoppert 2011-12-14 04:08:55

回答

1

您可以在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(); 
0

技术上...

你从A ContentHandler中并不真正“回归”的数据 - 内容处理程序的目的不是要满足任何特定的输入/输出合同。相反,它是应该对XML数据读取操作“起作用”的对象。一些ContentHandler可能不会与主机应用程序交互 - 例如,它们可能只是将数据输出到控制台。与此同时,其他人可能会将XML对象处理为bean,然后将这些bean序列化为数据库。

如果您希望您的应用程序直接“依赖”ContentHandler来创建对象,那么ContentHandler通常可能是应用程序中的一个子类,它访问应用程序的Model并将数据写入该模型。通过这里的“模型”,我指的是典型的MVC应用程序中的M。

实用答

ContentHandler接口是为了定义SAX解析器。该数据通常在调用endDocument()方法创建的,其中我们转储到数据库中的所有XML数据的行为,或作为打印报表。