当前位置: 首页 > 面试题库 >

JAXB-编组为XML时,可以将类包含简化吗?

强保臣
2023-03-14
问题内容

说,我有两节课:

@XmlRootElement
class A {
    @XmlElement
    String propertyOfA;
    @XmlElement
    B b;
}

class B {
    @XmlElement
    String propertyOfB;
}

JAXB返回按照以下方式格式化的XML:

<a>
  <propertyOfA>valueA</propertyOfA>
  <b>
    <propertyOfB>valueB</propertyOfB>
  </b>
</a>

我的问题是 如何展平XML中的层次结构? 这样我有:

<a>
  <propertyOfA>valueA</propertyOfA>
  <propertyOfB>valueB</propertyOfB>
</a>

可以通过注释完成吗?

目前,我正在考虑为A创建一种包装类,该包装类将以我希望在XML中看到它们的方式构建字段。有没有更好的办法?


问题答案:

注意: 我是 EclipseLink
JAXB(MOXy)的
负责人,并且是 JAXB
2(JSR-222)
专家组的成员。

您可以使用MOXy的@XmlPath扩展来映射此用例:

import java.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.XmlPath;

@XmlRootElement
class A {
    @XmlElement
    String propertyOfA;

    @XmlPath(".")
    B b;
}

想要查询更多的信息

  • http://blog.bdoughan.com/2010/07/xpath-based-mapping.html
  • http://blog.bdoughan.com/2010/09/xpath-based-mapping-geocode-example.html
  • http://blog.bdoughan.com/2011/03/map-to-element-based-on-attribute-value.html
  • http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html


 类似资料:
  • 问题内容: 我有一个使用JAXB编组为XML的对象。一个元素包含一个包含引号(“)的字符串。生成的XML具有”“所在的位置。 即使通常首选这样做,我也需要我的输出来匹配 旧 系统。如何强制JAXB不转换HTML实体? - 感谢您的答复。但是,我从未见过调用处理程序escape()的情况。您可以看看我在做什么吗?谢谢! - 输出是这样的: 如您所见,该回调从未显示。(一旦调用了回调,我将担心让它实际

  • 问题内容: 显然在JAXB的版本2中-验证器类已被弃用- 这是否意味着编组器会自动验证您的XML?如果是这样,它似乎并没有抱怨我正在形成一些不正确的XML!谁能给我一些有关如何验证编组XML以确保其符合XSD架构的建议。 非常感谢。 问题答案: 通过使用JAXP 1.3 Schema Validation Framework,在JAXB 2.0中扩展了验证功能。 在哪里之前: 现在您需要执行以下操

  • 问题内容: 考虑这个例子- 我有一个称为Report的类,该类具有Message类型的字段。Message类具有一个称为“ body”的字段,该字段是一个字符串。“ body”可以是任何字符串, 但有时包含格式正确的XML内容 。如何确保当“正文”包含XML内容时,序列化采用XML结构的形式而不是当前的结构? 这是带有输出的代码- 报告 类别 讯息 类别 主要 输出如下- 如您在上面的输出中看到的

  • 问题内容: 因此,我创建了一个名为CustomTitlebarActivity的Activity子类。本质上,我的应用程序中的每个主要活动都将具有一个自定义标题栏,该标题栏具有许多常用功能,例如主页按钮,标题,搜索按钮等。在当前的实现中,我仍然在布局XML中显式使用include语句每个CustomTitlebarActivity: 我似乎应该能够在CustomTitlebarActivity中执

  • 问题内容: 如果一个元组是不可变的,那么为什么它可以包含可变项呢? 似乎矛盾的是,当可变项(例如列表)确实被修改时,它所属的元组保持不变。 问题答案: 这是一个很好的问题。 关键的见解是,元组无法知道其中的对象是否可变。使对象可变的唯一方法是拥有一种更改其数据的方法。通常,无法检测到此情况。 另一个见解是Python的容器实际上不包含任何东西。相反,它们保留对其他对象的引用。同样,Python的变

  • 问题内容: 我可以使用“包装器”类来编组ObservableList,如下所示。但是我不能将其解组回以前的wrapper类。 这个想法是:我有一个“支出”的ObservableList。我将此列表放入包装器类中,并将该类保存为XML。结果看起来像这样: 我无法将其带回包装对象。我真的很感谢任何帮助。 主类JAXBContext(对所有人可见): 主类SAVEBUTTON: 主类-LOADBUTTO