2012-03-16 72 views
0
  1. 我想解析java中的XML。它將是DOM或SAX。閱讀JAXP是一本好書。另外,當我谷歌出來找到XERCES/XALAN。常用的解析器是?在JAVA中解析XML元素

  2. 在SAX解析器中,如果我註冊單個元素事件,SAX解析會在遇到元素後停止處理XML消息。在書中閱讀DOM讀取整個XML並加載到內存中,即使我想知道單個元素的值。

回答

2
  1. 你提到的所有上述解析器都非常好。如果應用程序執行了大量的XML處理,那麼我的個人偏好就是XERCES,否則「內置」解析器不夠好。

  2. 您將需要處理來自SAX解析器的每個事件,並忽略那些您不感興趣的事件。您可以通過「銷燬」解析器對象來停止解析。如果你只對一個大消息的一個或兩個元素感興趣,那麼SAX就是要走的路。如果你對所有或大部分元素都感興趣,那麼使用DOM解析器,你可以輕微地獲得性能,但是,「給我我想要的東西」API使得代碼比「我要給你的東西」更清晰API。

+0

非常感謝您的信息。 XERCES是獨立的JAR文件還是與JDK一起提供? JAXP比xerces更好嗎?另外當我想訪問一個或兩個大消息的元素,如果我使用SAX解析器並銷燬解析器對象,它是有效的?否則,它像DOM Parser一樣工作?使用它有什麼好處?另外,如果我想創建消息Web服務的SOAP消息,我可以使用xerces解析器?我應該使用什麼? – Arav 2012-03-16 05:38:27

+0

SAX解析器的優勢在於它可以在解析元素時爲您提供這些元素。因此,如果您只是想在將xml傳遞到另一個進程之前知道類似國家代碼的內容,那麼這非常有效。另一方面,DOM解析器會構建嵌套字典和列表的複雜結構,因此您必須等待所有XML被解析,然後才能構建完整的樹,然後才能訪問任何元素。如果你只是想檢查一個或兩個元素,它非常昂貴。由於SAX是一個流解析器,您可以處理任何大小的文檔。一個DOM解析器需要適應內存中的所有內容。 – 2012-03-16 07:37:14

+0

非常感謝信息 – Arav 2012-03-18 22:51:32

8

我想在java中解析XML。它將是DOM或SAX。在書中閱讀 JAXP是一個不錯的選擇。另外,當我谷歌出來找到XERCES/XALAN。哪個 解析器是常用的?

Xerces是DOM和SAX的實現,它是內置於JDK中的。見javax.xml.parsers

在SAX解析器中,如果我註冊單個元素事件,SAX 解析會在遇到元素後停止處理XML消息。

讀一本書,即使 我想知道的單個元素值DOM讀取整個XML並加載到內存中。

是的。

+0

非常感謝您的信息。 XERCES是獨立的JAR文件還是與JDK一起提供? JAXP比xerces更好嗎?另外當我想訪問一個或兩個大消息的元素,如果我使用SAX解析器並銷燬解析器對象,它是有效的?否則,它像DOM Parser一樣工作?使用它有什麼好處?另外,如果我想創建消息Web服務的SOAP消息,我可以使用xerces解析器?我應該使用什麼? – Arav 2012-03-16 05:38:52

+1

@Arav(1)正如我已經說過的,Xerces是內置於JDK中的。 JAXP是Xerces的一個包裝。 (2)SAX非常適合這種用途。 (3)SAX不能像DOM那樣工作,因爲它不會構建DOM,它只是在文檔越過它時傳遞事件。 (4)解析器解析現有消息,它們不創建新消息。 (5)JAXP包含一個DocumentBuilder--猜測是什麼 - 構建文檔;但是Java已經有API來構建SOAP請求。 – EJP 2012-03-16 06:01:35

+0

非常感謝信息 – Arav 2012-03-18 22:52:26

1

我不確定我是否掌握了您想要完成的所有細節,但是如果您有描述XML格式的xsd文件,我會說JAXB是要走的路。它會帶你xsd併爲你自動生成類。然後,您可以輕鬆地來回 - 編組和解組數據。 Netbeans的自動化水平最近讓我印象深刻,當我解決類似的任務時

希望我的建議能夠考慮JAXB是有幫助的。

+0

非常感謝JAXB的信息 – Arav 2012-03-16 05:41:31

+1

+1。除了從XML模式生成Java模型外,您還可以從您自己的域類開始,並使用JAXB註釋來自定義XML表示:http://wiki.eclipse.org/EclipseLink/Examples/MOXy/GettingStarted/TheBasics – 2012-03-16 10:01:09

0

DOM和SAX的接口,Xerces的是目前最流行的實現這些接口。實際上有兩個版本的Xerces:一個來自Apache,另一個來自Sun/Oracle JDK。 JDK中的一個是越野車;優先使用Apache中的一個。

由於您剛剛起步,因此它可能比DOM和SAX更爲廣泛。 SAX是一個非常低級的接口,提供了很好的性能,但功能很少:如果這是您的方式,您可以期望在應用程序中編寫相當多複雜的代碼。 DOM爲您提供了一個XML樹形模型,但是有更多更好更簡單的接口可以做同樣的事情:JDOM提供了您需要的一切,並且比DOM更易於使用。

+0

非常感謝您的信息。 – Arav 2012-03-20 05:31:18