Java 使用XMLAdapter将XML对象列表解组到HashMap中
我得到了以下XMLJava 使用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> <
<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" );