我正在使用 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 简单得多。
您需要做的是:
- 获取您的 XML 的 W3C XML 架构。如果您没有并且无法获取,那么有一些工具可以根据输入 XML 生成架构。 Trang让这变得非常容易。
- 从模式生成 Java 类。为此,您可以使用 Sun 的 JDK 中提供的 XJC(XML 到 Java 编译器)。如果您使用 Ant 或 Maven 等构建工具,则可以使用插件。这可以自动化该过程,使其成为完整构建的一部分。
- 将 JAXB API 与生成的类结合使用,可以轻松地将 XML 文档转换为对象,反之亦然。
虽然 JAXB 需要一些时间来学习(特别是如果所需的 XML-Java 映射不是一对一的话),但我认为从长远来看,您最终会节省时间。
很抱歉,如果您确实需要 SAX 并且这个答案不适用,但我想我宁愿在使用有点过时的 XML 处理模型之前让您知道您的选择。请注意,您可能还对 DOM 和 StAX 感兴趣。
关于java - 如何创建使用 SAX 解析 xml 的处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8289275/