2013-03-27 54 views
0

我必須使用JAXB對象進行大量工作,並且在獲取值時有一件令人討厭的事情。讓我們假設我有下一個XML:在沒有反射的java中xpath

... 
<a> 
    <b> 
     <c>1</c> 
    </b> 
</a> 
... 

在java中我可以在c如下到達元素的值:

xml.getA().getB().getC() 

但是,如果元素是不是強制性的話,我需要實現許多如果條件檢查元素是否爲空。

if (xml != null && xml.getA() != null && xml.getA().getB() != null && xml.getA().getB().getC() != null { 
    ... 
} 

我想直接在JAXB對象上使用XPath以避免寫入這些可怕的條件。我知道有一些類似的工具(例如Apache JXPAth),但通常這些框架使用反射。我不想使用反射,因爲它會嚴重影響性能。 不幸的是,我不能想象任何解決方案,而不使用反射,但也許有一個。 你能幫我嗎? 謝謝, 五


我發現org.w3c.dom.Document中可以使用XPath使用,但接下來的問題是我如何使用org.w3c.dom.Document中以註釋的web服務,而不編組它又是什麼? (我有點擔心編組XML的次數多於必要)謝謝!

+0

反射不一定很慢。任何正確使用反射的體面框架(即緩存'java.lang.reflect。*'實例和相關信息)將使您的性能接近等效的非反射訪問。在丟棄它之前測試它。 – gpeche 2013-05-28 18:33:56

回答

0

好吧,這不是一個「好」的解決方案,但是如果你的主要目標是避免編寫所有這些條件,你有沒有考慮過把所有的東西都包裝在try/catch中呢NullPointerException?在不存在的情況下,性能會受到影響,我會說這不是很好的使用異常,但它可以使得更簡單的獲取和使用內部值的語法。