首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过@XmlPath MOXy注释解组嵌套集合

通过@XmlPath MOXy注释解组嵌套集合
EN

Stack Overflow用户
提问于 2012-06-22 17:29:35
回答 1查看 1.9K关注 0票数 2

给定以下XML结构:

代码语言:javascript
复制
<root>
  <data>x</data>
  <details>
    <some_other_element>...</some_other_element>
    <collection>
      <element><a>1</a></element>
      <element><a>2</a></element>
      <element><a>3</a></element>
    <collection>
  </details>
</root>

我如何使用MOXy将其解组为一个基本扁平的POJO?我尝试了这种方法(为简洁起见,省略了getter和setter):

代码语言:javascript
复制
@XmlRootElement(name = "root")
class Root {
  @XmlElement
  private String data;

  @XmlElement
  @XmlPath("details/some_other_element")
  private String someOtherElement;

  @XmlPath("details")
  @XmlElementWrapper(name = "collection")
  @XmlElement(name = "element")
  private Collection<Element> elements;
}

class Element {
  @XmlElement
  private String a;
}

不幸的是,这只会将一个未初始化的元素添加到elements集合中。我希望避免声明Details类(这确实可以工作),因为这会破坏<details>下面元素的其他@XmlPath映射。

我已经验证了MOXy已实际加载(如jaxb.properties中声明的那样)。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-22 17:53:51

尝试将包装标记和元素添加到@XmlPath,而不是使用@XmlElementWrapper

代码语言:javascript
复制
@XmlPath("details/collection/element")
@XmlElement(name = "element")
private Collection<Element> elements;

我认为您甚至可以保留@XmlElementWrapper注释,以备将来更改jaxb提供程序时使用。

以下是您的用例所需的最小注释:

代码语言:javascript
复制
package forum11153599;

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

@XmlRootElement
class Root {
    @XmlElement
    private String data;

    @XmlPath("details/some_other_element/text()")
    private String someOtherElement;

    @XmlPath("details/collection/element")
    private Collection<Element> elements;

}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11153599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档