2

给定以下 XML 结构:

<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):

@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类(确实有效),因为这会破坏@XmlPath下面元素的其他映射<details>

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

有任何想法吗?

4

1 回答 1

3

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

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

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


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

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;

}
于 2012-06-22T09:53:51.200 回答