我正在尝试将JAXB用于已经以某种格式编写XML的应用程序。为了向后兼容性问题,我必须保持格式。
我在类中有以下代码段:
@XmlElement( name = "field" )
private StudyIdentifier2 studyIdentifier;
@XmlElement( name = "field" )
private List<GenericField> demographicsFields = new ArrayList<GenericField>();
此代码将正确编写以下XML:
<field>
<value>2</value>
<XMLtag>id</XMLtag>
</field>
<field>
<value>JAMES</value>
<XMLtag>patient_name</XMLtag>
</field>
<field>
<value>This is a test</value>
<XMLtag>study_description</XMLtag>
</field>
但是,当我尝试解组它时,我只是获取包含最后一个XML字段详细信息的StudyIdentifier2
对象,study_description
和demographicsFields
ArrayList
刚刚获得空值在里面。我假设这是因为我在@XMLElement
注释中指定了相同的名称值,因此它无法正确地取消显示。但是我需要它们被称为<field>
。是否有可能给它们两个相同的名称,或者它们必须是不同的才能正确地解组?
很可能是一个非常简单的解决方案,我还没有全面了解JAXB的运作方式。
答案 0 :(得分:0)
此XML中没有任何内容可用于以编程方式确定它所属的“字段”类型(StudyIdentifier2
或GenericField
)。我可能甚至无法“手动”组织这个XML,忽略了JAXB的任何可能的限制或困难。
如果没有看到GenericField
的类定义,很难确切地看到这里发生了什么。但是,很可能,是的,你需要给它们不同的名称(更改你的XML并可能导致你提到的一些向后兼容性问题),如果你想要“正确”解组它。或者,如果GenericField
可以代表示例XML中的所有3个字段,那么如果您只删除studyIdentifier
,并让demographicsFields
代表编组和解组的所有内容,那么可能会将其重命名为更合适的事情,如genericFields
?
现在,如果您知道应始终从XML中的第3个StudyIdentifer2
读取<field/>
,并且其他所有内容都需要进入demographicsFields
,请在您的问题,我们可以找到一些额外的选择。