Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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_Xml_Marshalling_Xstream_Unmarshalling - Fatal编程技术网

Java 合适的XML封送器和解封器

Java 合适的XML封送器和解封器,java,xml,marshalling,xstream,unmarshalling,Java,Xml,Marshalling,Xstream,Unmarshalling,我们需要将XML转换为对象,反之亦然。有点像Xstream。到目前为止,我们一直在使用Xstream对object/xml进行整理和解包。 然而问题是,在xstream中对应于XML的对象需要将所有标记作为属性;否则,如果XML包含对象中不存在的任何额外标记;它爆炸了 或者,我们需要编写自定义转换器,以确保操作按预期进行。我还建议common digester允许从XML到对象的Xpath解析 我想知道什么是最好的方法;只要: 我只想将XML转换为对象,反之亦然 能够以静默方式忽略XML中映射对

我们需要将XML转换为对象,反之亦然。有点像Xstream。到目前为止,我们一直在使用Xstream对object/xml进行整理和解包。 然而问题是,在xstream中对应于XML的对象需要将所有标记作为属性;否则,如果XML包含对象中不存在的任何额外标记;它爆炸了

或者,我们需要编写自定义转换器,以确保操作按预期进行。我还建议common digester允许从XML到对象的Xpath解析

我想知道什么是最好的方法;只要:

  • 我只想将XML转换为对象,反之亦然
  • 能够以静默方式忽略XML中映射对象中不存在的任何映射字段

  • 你有什么建议?

    你可能想看看这个问题

    这些是它列出的一些库


    我建议使用I使用注释来映射属性和元素,并具有“非严格”模式,允许您从XML文档中读取,忽略Java对象中不存在的所有属性和元素。

    您需要使用此处所述的自定义MapperWrapper


    它所做的唯一一件事就是告诉XStream忽略它不知道要处理的所有字段。

    +1:这在处理多个版本的数据时很重要。假设新版本只是有更多属性,并且在其他方面与期望旧版本的软件向后兼容,那么您希望将新XML解组到旧对象中。您希望客户机能够从XML中解组具有较少属性的较旧版本的对象。我理解您的观点,这也是我的意图。然而,有一个框架能够以最少的努力完成这项工作。就像我说的,在流中我必须编写转换器。还有别的事吗;这在这方面有更大的帮助。我不知道有哪些框架可以帮助实现这一点。或者你可以使用默认情况下提供所需行为的JAXB。为什么要使用像Simple这样的专有解决方案,当你可以使用像JAXB这样的行业标准时,我想你误解了专有这个词,Simple有一个更自由的许可证(Apache)。此外,使用Simple比使用JAXB可以做得更多。最后,它更易于使用,速度更快,重量更轻,适用于Andriod、GAE和任何Java1.5+VM。
    XStream xstream = new XStream() {
      @Override
      protected MapperWrapper wrapMapper(MapperWrapper next) {
        return new MapperWrapper(next) {
          @Override
          public boolean shouldSerializeMember(Class definedIn,
                  String fieldName) {
            if (definedIn == Object.class) {
              return false;
            }
            return super.shouldSerializeMember(definedIn, fieldName);
          }
        };
      }
    };