解组具有相同名称属性的@XMLElement

时间:2011-07-24 21:36:29

标签: java xml jaxb

我正在尝试将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_descriptiondemographicsFields ArrayList刚刚获得空值在里面。我假设这是因为我在@XMLElement注释中指定了相同的名称值,因此它无法正确地取消显示。但是我需要它们被称为<field>。是否有可能给它们两个相同的名称,或者它们必须是不同的才能正确地解组?

很可能是一个非常简单的解决方案,我还没有全面了解JAXB的运作方式。

1 个答案:

答案 0 :(得分:0)

此XML中没有任何内容可用于以编程方式确定它所属的“字段”类型(StudyIdentifier2GenericField)。我可能甚至无法“手动”组织这个XML,忽略了JAXB的任何可能的限制或困难。

如果没有看到GenericField的类定义,很难确切地看到这里发生了什么。但是,很可能,是的,你需要给它们不同的名称(更改你的XML并可能导致你提到的一些向后兼容性问题),如果你想要“正确”解组它。或者,如果GenericField可以代表示例XML中的所有3个字段,那么如果您只删除studyIdentifier,并让demographicsFields代表编组和解组的所有内容,那么可能会将其重命名为更合适的事情,如genericFields

现在,如果您知道应始终从XML中的第3个StudyIdentifer2读取<field/>,并且其他所有内容都需要进入demographicsFields,请在您的问题,我们可以找到一些额外的选择。