2013-12-16 17 views
1

我想要解析的服務器上有一個XML文件。通常我從XML生成一個XSD,然後從這個XSD生成Java POJO。然後使用jackson將XML解析爲java對象表示。僅僅使用xpath不是更簡單嗎?這意味着我不需要生成基於XML的對象層次結構,並且如果XML更改,則不需要重新生成對象層次結構。 xpath看起來更簡潔直觀?使用xpath而不是XSD對象生成來訪問XML細節?

爲什麼我應該使用XSD,而不是xpath的對象生成?

回答

0

根據XML Schema規範,XSD用於定義XML文檔的結構,內容和語義。這意味着您可以使用XSD來驗證您的XML文件。

根據您的情況,如果您只需從XML文件中獲取某些值,則可能無需生成整個對象樹。在這種情況下,XPath是要走的路。但是,在解析XML文件之前,您仍然可能想要有一個XSD文件來驗證XML文件。這樣,當你的XML文件結構發生變化時,你可以使你的軟件fail fast,這將建議你改變你的XPath表達式。但是爲了達到這個目的,你不應該使用從XML文件生成的XSD,而應該有一個單獨的預生成XSD文件,它符合XPath表達式。

0

我認爲這兩種方法都是有效的,這取決於具體情況。 在一天結束時,您想要從該遠程xml文件中提取值並對它們執行某些操作。

要考慮的第一個標準是該文件的大小和數據元素的數量。 如果只是少數,那麼xpath提取應該很簡單。但是,如果這個xml文件代表了一個相當大的和/或複雜的數據結構,那麼您可能需要將其解序列化爲一個可以使用的Java數據結構,而JAXB將是一個很好的候選項。

如果遠程服務器遵守或發佈XML模式,JAXB將變得更簡單/更好。如果沒有,並且經常發生變化,那麼您將遇到任何一種情況,但對於JAXB尤其如此。有許多方法可以通過用XSLT預處理xml來強化它成爲更可靠的形式來平滑事情,但這將成爲最可能的部分解決方案。