Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 简单XML-两个不同的根元素_Java_Simple Framework - Fatal编程技术网

Java 简单XML-两个不同的根元素

Java 简单XML-两个不同的根元素,java,simple-framework,Java,Simple Framework,我的问题是,我必须解析一个可以有两个不同根xml标记的xml文档 备选案文1: <?xml version="1.0" encoding="UTF-8"?> <success> success... </success> 成功。。。 备选案文2: <?xml version="1.0" encoding="UTF-8"?> <error> error... </error> 错误。。。 我知道有注释@Elemen

我的问题是,我必须解析一个可以有两个不同根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()
,但据我所知,它只适用于非根标记

更多信息:

我正在改造和使用一个api,并使用简单的xml解析xml文档

如果有人能找到解决方案或解决办法,那就太好了

我唯一的想法是调用api,捕获异常,然后使用变体2的另一个模型重试


提前感谢

您可以使用
持久器。验证
。它接受与Persister.read相同的参数,如果可以解析传递的类,则返回简单的true或false


这是使用API的最佳方法,您还可以通过读取xml的前两行(在您的示例中)手动检测类但在更复杂的结构中,您需要使用“验证”。

请在帖子中显示Java代码。@JimGarrison我只想知道是否可以使用简单的xml框架()解析包含两个可能根元素的xml文档。我不需要实际的实现。从文档中看,在尝试反序列化之前,您必须以某种方式检测预期的类。这就是它被称为“Simple”的原因。据我所知,当您有不同的根元素时,您实际上有不同的xml文档类型。一种方法是创建两个解析器,一个用于成功文档,另一个用于错误。更好的解决方案是将成功和错误元素封装在一个公共根元素中,但这只有在您首先能够控制创建xml文档的情况下才是一个选项。我相信@MaanooAk的答案将是您所能做的最好的答案。唯一的问题是:我正在使用改型,无法直接访问或控制反序列化过程。没有调用对我的回调,在该回调中,我可以获取字符串形式的响应并验证xml(…),因为在此之前会引发异常。也许我可以通过提供自己的
转换器来解决这个问题。好的,我找到了一个解决方案。如果我不传入一个
转换器
并将返回类型更改为
RequestBody
,我可以提取主体并用您的解决方案自己解析它。转换器也很容易制作,简单的转换器只有大约40行代码:Ohhhh,那么我想我会再看看这种方法。