Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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 使用XMLAdapter将XML对象列表解组到HashMap中_Java_Xml_Jaxb - Fatal编程技术网

Java 使用XMLAdapter将XML对象列表解组到HashMap中

Java 使用XMLAdapter将XML对象列表解组到HashMap中,java,xml,jaxb,Java,Xml,Jaxb,我得到了以下XML <demographics> <field> <value>03290</value> <XMLtag>study_identifier</XMLtag> </field> <field> <value>somename</value> <XMLtag>name</XMLtag> <

我得到了以下XML

<demographics>
  <field>
    <value>03290</value>
    <XMLtag>study_identifier</XMLtag>
  </field>
  <field>
    <value>somename</value>
    <XMLtag>name</XMLtag>
  </field>
  <filename>bbRad_BUILD_dem_03290_BUILD_006742.xml</filename>
  <study_cache_dir>somestring</study_cache_dir>
</demographics>
如果我解组XML,它工作正常,
multivalueFields
包含两个
Field2
对象的列表。我想要的是将
列表
转换为
HashMap
,其中字符串键将是
字段2
对象的
xmlTag

到目前为止,我已经厌倦了按如下方式更改Demographics2类和使用XmlAdapter:

@XmlElement( name = "field" )
@XmlJavaTypeAdapter( MultiValueFieldsAdapter.class )
private Map< String, Field2> mutivalueFields;

@user23123412如果没有,我仍然无法让XmlAdapter正常工作:(您可以添加一个初始化为null的临时字段
Map
,并在第一次调用getMutiValueFieldsMap()时创建和保存映射。
public class Field2
{
    @XmlElement( name = "XMLtag")
    private String xmlTag;
    @XmlElement( name = "value" )
    private String value;
}
@XmlElement( name = "field" )
@XmlJavaTypeAdapter( MultiValueFieldsAdapter.class )
private Map< String, Field2> mutivalueFields;
public class MultiValueFieldsAdapter extends XmlAdapter< List<Field2>, Map<String, Field2>> {

   @Override
   public List<Field2> marshal( Map<String, Field2> arg0) throws Exception {

       // loop all in Map and just add the Field2 objects to a list then
       // return the list
       return null;
   }

    @Override
    public Map<String, Field2> unmarshal( List<Field2> arg0 ) throws Exception {

         // The problem is here arg0 will be emtpy list, unless we make arg0 a Field2 object
         // it seems to be calling unmarshal for each Field2 object, rather than some list

         // loop each Field2 and add to Map
         Map<String, Field2> newMap = new HashMap<String, Field2>( arg.length() );

         for ( Field2 f : arg0 )
             newMap.put( f.xmlTag, f );
    }
}
Field2 nameField = multivalueFields.get( "name" );