gpt4 book ai didi

java - 解码具有相同名称属性的@XMLElement

转载 作者:行者123 更新时间:2023-12-01 05:42:17 32 4
gpt4 key购买 nike

我正在尝试将 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>

但是,当我尝试对其进行解码时,我只是得到了我的 StudyIdentifier2包含最后一个 XML 字段详细信息的对象,study_descriptiondemographicsFields ArrayList刚刚有空值。我认为这是因为我在 @XMLElement 中指定了相同的名称值注释,因此无法正确解压缩。但是我需要它们都被称为 <field> 。是否可以给它们提供相同的名称,或者它们必须不同才能正确解码?

很可能是一个非常简单的解决方案,我还没有完全了解 JAXB 的工作原理。

最佳答案

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

如果不查看GenericField的类定义,就很难准确地看到这里发生了什么。 。然而,如果您希望“正确”地对其进行解码,则很可能需要给它们提供不同的名称(更改您的 XML,并可能导致您提到的一些向后兼容性问题)。或者,如果 GenericField可以表示示例 XML 中的所有 3 个字段,如果您删除 studyIdentifier 会怎样? ,让demographicsFields代表编码和解码的所有内容 - 也许将其重命名为更合适的名称,例如 genericFields

现在,如果您知道 StudyIdentifer2应始终从第三个 <field/> 开始读取在 XML 中,其他所有内容都需要进入 demographicsFields ,请在您的问题中澄清这一点,我们也许可以找到一些其他选项。

关于java - 解码具有相同名称属性的@XMLElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6809901/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com