2017-08-29 28 views
2

我的問題是,我必須解析一個xml文檔,它可以有兩個不同的根xml標籤。簡單的XML - 兩個不同的根元素

變體1:

<?xml version="1.0" encoding="UTF-8"?> 
<success> 
success... 
</success> 

變2:

<?xml version="1.0" encoding="UTF-8"?> 
<error> 
error... 
</error> 

我知道有註釋@ElementUnion(),但據我瞭解它僅適用於非root標籤。

一些詳細信息:

我與改造工作,消耗的API,並用簡單的XML解析XML文檔。

如果某人有解決方案或解決方法,那將會很棒。

我唯一的想法是調用API,捕獲異常,並與其它型號重試變種2.

在此先感謝

+0

請編輯您的帖子以顯示Java代碼。 –

+0

@JimGarrison我只想知道是否可以使用simple-xml-framework(http://simple.sourceforge.net/home.php)解析帶有兩個可能根元素的xml文檔。我不需要實際的實現。 – lampenlampen

+0

從文檔看來,在嘗試反序列化之前,您需要以某種方式檢測預期的類。這就是爲什麼它被稱爲「簡單」。 –

回答

3

可以使用Persister.validate。它採用與Persister.read相同的參數,並且如果可以分析傳遞的類,則返回簡單的真或假。

這是使用API​​的最佳方式,您也可以通過讀取xml的前兩行(在您的示例中)手動檢測類,但在更復雜的結構中需要使用「驗證」。

+0

唯一的問題:我正在使用改造,並沒有直接訪問或控制反序列化過程。回調給我,我可以得到響應作爲字符串和驗證xml(...)不被調用,因爲在此之前引發異常。也許我可以通過提供自己的Converter來解決這個問題。 – lampenlampen

+0

好的,我找到了一個解決方案。如果我沒有傳入'Converter'並將返回類型更改爲'RequestBody',那麼我可以使用您的解決方案自行提取主體並解析它。 – lampenlampen

+0

該轉換器也很容易製作,簡單的轉換器只有大約40行代碼:https://github.com/square/retrofit/blob/master/retrofit-converters/simplexml/src/main/java/retrofit2/轉換器/ simplexml/SimpleXmlResponseBodyConverter.java – MaanooAk