【问题标题】:How to create a handler for parsing a xml using SAX?如何使用 SAX 创建用于解析 xml 的处理程序?
【发布时间】:2012-01-07 12:35:10
【问题描述】:

我正在使用 xerces SAX 来解析这个 XML:

<product id="123">
  <sku>abc123</sku>
  <location>
    <warehouse>1</warehouse/>
    <level>3</level>
  </location>
  <details>
    <weight unit="kg">150</weight/>
    <mfg>honda</mfg>
  </details>
</product>

所以我创建了自己的名为 ProductSAXHandler.java 的类:

public class ProductSAXHandler extends DefaultHandler {


}

现在,我计划通过我的 spring mvc 控制器将我的 XML 文件作为字符串传递,并且我希望返回一个 Product 对象。

所以在我的 ProductSAXHandler 中,我将创建我的 startElement 和 endElement 方法。

所以我应该创建一个将 xml 作为字符串的方法,然后实例化这个 ProductSAXhandler,然后调用 parse 吗?

这是我第一次处理 xml/sax,所以我有点不清楚如何设计这个类。

【问题讨论】:

  • 你好像有把握,不如试试看吧?
  • 只是确保我走在正确的轨道上,man java 有很多配置问题,我发现我对任何事情都不信任自己 :)
  • 所以我将有一个返回 Product 类的静态方法,在该方法中我将执行以下操作: ProductSAXHandler handler = new ProductSAXHandler();然后将 ContentHandler 设置为 handler?

标签: java xml spring sax xerces


【解决方案1】:

这并不能直接回答你的问题,但我会在字里行间读一点,并专注于你的实际意图......

由于您想要一个封装来自 XML 的数据的 Product 类的实例,可能会优先采用结构化的方式,因此您最好使用 JAXB 来完成此任务。除非您对自定义将 XML 输入绑定到对象有非常具体的要求,否则这将比使用 SAX 简单得多。

你需要做的是:

  1. 为您的 XML 获取 W3C XML 模式。如果您没有并且无法获得,那么有一些工具可以根据输入 XML 生成模式。 Trang 让这一切变得非常简单。
  2. 从架构生成 Java 类。为此,您可以使用 Sun 的 JDK 提供的 XJC(XML-to-Java 编译器)。如果您使用的是 Ant 或 Maven 等构建工具,则可以使用插件。这可以使流程自动化,使其成为完整构建的一部分。
  3. 将 JAXB API 与您生成的类一起使用,可以轻松地将 XML 文档转换为对象,反之亦然。

虽然 JAXB 需要一些时间来学习(尤其是在所需的 XML-Java 映射不是一对一的情况下),但我认为从长远来看您最终会节省时间。

很抱歉,如果您确实需要 SAX 并且此答案不适用,但我想在使用有点过时的 XML 处理模型之前,我宁愿让您知道您的选择。请注意,您可能也对 DOM 和 StAX 感兴趣。

【讨论】:

    猜你喜欢
    • 2011-01-28
    • 2011-06-17
    • 2011-11-03
    • 2011-02-24
    • 2012-08-27
    • 2017-06-08
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多