2017-08-29 59 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

相关问题