2011-11-27 60 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可能也是您感興趣的。