java - 如何创建使用 SAX 解析 xml 的处理程序?

标签 java xml spring sax xerces

我正在使用 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 Controller 将 XML 文件作为字符串传递,并且我希望返回一个 Product 对象。

因此,在我的 ProductSAXHandler 中,我将创建 startElement、endElement 方法。

那么我是否应该创建一个方法,将 xml 作为字符串,然后实例化此 ProductSAXhandler,然后调用解析?

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

最佳答案

这并不能直接回答你的问题,但我会从字里行间解读一下,并重点关注你的实际意图......

由于您想要某个 Product 类的实例来封装 XML 中的数据(可能会优先选择结构化方式),因此最好使用 JAXB为了这个任务。除非您对将 XML 输入绑定(bind)到对象的定制有真正特定的要求,否则这将比使用 SAX 简单得多。

您需要做的是:

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

虽然 JAXB 需要一些时间来学习(特别是如果所需的 XML-Java 映射不是一对一的话),但我认为从长远来看,您最终会节省时间。

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

关于java - 如何创建使用 SAX 解析 xml 的处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8289275/

相关文章:

java - 通过 "Eclipse Temurin JDK with Hotspot"安装后,如何在 VS Code 中配置 "coding pack for java"?

java - Java 变量应该在声明时初始化吗?

c++ - 如何通过boost property_tree加密xml文件?

java - JAXB 逐个元素解码列表

java - 合并两个具有不同 persistence.xml 配置的项目?使用 EclipseLink 而不使用 JPA?

java - 仅在选定设备上的 Listview 上出现 Android Stackoverflow 错误

java - Spring MVC 与 .html 一起使用

javascript - 使用javascript遍历xml

java - 后台 worker 的Spring Boot应用程序

java - 如何在 Spring 中解析 XML 消息负载?