按属性名称与标记名称解组XML元素

时间:2014-10-01 12:39:20

标签: java xml jaxb unmarshalling moxy

这是我试图解组的XML:

<eveapi version="2" zkbapi="1">
  <result>
    <rowset name="events">
      <row eventID="41551776" solarSystemID="30003069">
        <pilot characterID="1803362092"/>
        <rowset name="copilots">
          <row characterID="914916227"/>
          <row characterID="877714973"/>
        </rowset>
        <rowset name="items">
          <row typeID="31055"/>
          <row typeID="2048"/>
        </rowset>
      </row>
    </rowset>
  </result>
</eveapi>

我遇到问题解组两个rowset标签copilots和items(unmarshall后对象为null)。此外,我无法控制架构。下面是表示eveapi / result / rowset / row级别的标记的类。事件由jaxb实例化。飞行员没有编组。但我不能让副本和物品上班,它们都是空的。

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "row")
public class Event {

    @XmlElement(name = "pilot")
    Pilot pilot;

    @XmlPath("rowset[@name='copilots']")
    Copilots copilots;

    @XmlPath("rowset[@name='items']")
    Items items;

我正在做什么?谢谢!

1 个答案:

答案 0 :(得分:1)

要使用@XmlPath注释,您需要确保使用EclipseLink JAXB (MOXy)作为JAXB提供程序。为此,您需要在类路径上使用EclipseLink,并在与域模型相同的包中使用jaxb.properties文件,并使用以下条目:

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

有关详细信息,请参阅我博客上的以下帖子: