【问题标题】:Return Objects created while parsing an XML Document返回解析 XML 文档时创建的对象
【发布时间】:2011-12-14 03:47:52
【问题描述】:

所以我想从 xml 文件中读取数据,我现在正处于我有 XMLReaderContentHandler 的位置,当endDocument() 被触发时,我已经“收集”了我需要的所有数据来自文档。

但是现在好像撞墙了……

如何返回收集到的数据(来自ContentHandler)以便在我的应用程序中使用?

【问题讨论】:

  • 顾名思义 (ContentHanlder),它是一个处理程序。而且我们不会从处理程序返回,而是在某些事件发生时处理它们。你可以在这里看到:docs.oracle.com/javase/1.4.2/docs/api/org/xml/sax/…,所有方法的返回类型都是 void。可能你可以做的是将它保存(或推送)到某个地方,或者在处理程序中做任何你需要做的事情。
  • 我现在已经意识到了很多,我只是在寻找一种优雅的方式来使用我的数据,并告诉我的应用程序下一步该做什么。
  • 那么您需要更新您的帖子(可能使用一些相关代码)以反映您在完成收集数据后真正想要在应用程序中执行的操作。因为现在无法猜测您下一步真正打算做什么。

标签: java xml return xmlreader


【解决方案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;
  }
  ....
}

从 Handler 获取列表:

MyTextHandler handler=new MyTextHandler();
reader.setContentHandler(handler);
InputSource is = new InputSource(filename);
reader.parse(is);

ArrayList<YourModel> list=handler.getList();

【讨论】:

    【解决方案2】:

    技术上...

    您并没有真正从 ContentHandler 中“返回”数据 - 内容处理程序并非旨在履行任何特定的输入/输出合同。相反,它是一个对象,应该对 XML 数据读取操作进行“操作”。一些 ContentHandler 可能不与主机应用程序交互 - 例如,它们可能只是将数据打印到控制台。同时,其他人可能会将 XML 对象作为 bean 处理,然后将这些 bean 序列化到数据库中。

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

    实用答案

    contentHandler 接口旨在定义 SAX 解析器的行为。数据通常在 endDocument() 方法中创建,其中我们将所有 XML 数据转储到数据库中,或作为打印语句。

    【讨论】:

    • 这可能只是朝着正确方向迈出的一步......现在会好好睡一觉,明天试着给我的应用程序一个有用的结构,因为虽然我“知道”MVC,但我认为我从来没有真正开始了解如何优雅地使用它,但我认为谷歌知道。感谢您的回复!
    • 好 - 另见下一个问题...更具体一点:“M”是返回的列表,处理程序正在封装模型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 2011-04-16
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 2015-09-12
    相关资源
    最近更新 更多