16

我在 Android 上使用 SimpleXml 来反序列化我无法控制的 xml。现在,每次 xml 更改时,它都会阻止我的应用程序,因为我的对象类中没有定义新元素。有没有一种方法可以指定 SimpleXML 来忽略这些错误映射?查看了文档,找不到任何可以帮助我解决的问题。

4

2 回答 2

24

我很确定您可以通过将常规@Root声明替换为 来绕过严格映射@Root(strict=false),这将消除每个元素都应与类定义中的字段匹配的要求。更准确地说,来自文档:

这用于确定是否应以严格的方式解析表示的对象。严格的解析要求 XML 文档中的每个元素和属性都与类模式中的一个字段相匹配。如果元素或属性与字段不匹配,则解析失败并出现异常。将严格解析设置为 false 允许在反序列化期间跳过源 XML 文档中的详细信息。

Simple XML 项目站点上的教程列表中还提供了一个示例。

于 2012-04-22T11:42:20.483 回答
1

read您可以通过添加“false”作为最后一个参数来为特定的所有标签指定要禁用的严格模式。也来自他们的文档

如果有多个对象需要松散映射,那么使用 Root 注释可能不是理想的解决方案。在这种情况下,可以要求持久化器本身执行松散映射。只需将布尔值传递给 read 方法,指示所需的映射类型。默认情况下,持久化器使用严格映射,可以使用 Root 注释逐个对象覆盖,如上例所示。但是,可以覆盖此默认值,如下面的代码片段所示。

Contact contact = serializer.read(Contact.class, source, false);
于 2015-04-24T20:33:47.803 回答