2011-11-27 56 views
0

我使用的Xerces SAX解析这个XML:如何创建使用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然后调用解析?

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

+0

你似乎有一个处理它,你为什么不试试看,看看? – skaffman

+0

只是确保我在正确的轨道上,man java有这么多的配置问题我发现我不相信自己的任何东西:) – Blankman

+0

所以我会有一个静态方法返回一个Product类,并在该方法我会这样做:ProductSAXHandler handler = new ProductSAXHandler();然后将ContentHandler设置为处理程序? – Blankman

回答

1

这并不直接回答你的问题,但我会读线之间的位并专注于您的实际意图......

既然你想,它封装了数据的一些Product类的一个实例从XML中,可能按照优先级结构化的方式,您可以使用JAXB来完成此任务。除非您对将绑定XML输入定制到对象有特别的要求,否则这比使用SAX要简单得多。

什么你需要做的是:

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

尽管JAXB需要一些时间来学习(特别是如果所需的XML-Java映射不是1对1的话),我想最终会节省时间。

对不起,如果你真的需要SAX,这个答案不适用,但我想我宁愿让你知道你的选择,然后再使用一个古老的XML处理模型。请注意,DOM和StAX可能也是您感兴趣的。