EclipseLink MOXy @XmlPath支持按属性值获取元素值

时间:2011-03-16 20:51:05

标签: xpath jaxb eclipselink moxy

使用EclipseLink MOXy JAXB实现,我正在尝试使用@XmlPath批注根据元素属性的值获取元素值。我似乎无法让它发挥作用。这支持了吗?

XML摘录:
<Item>
...
<ItemRefFields>
<ItemRefField id="1">12345</ItemRefField>
<ItemRefField id="2">blah</ItemRefField>
</ItemRefFields>
</Item>

POJO摘录:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="Item")
public class Item
{
...
@XmlPath("ItemRefFields/ItemRefField[@id='1']/text()")
private String ItemRef1 = null;
@XmlPath("ItemRefFields/ItemRefField[@id='2']/text()")
private String ItemRef2 = null;
...
}

现在发生的是两个值连续分配给ItemRef2,使得“blah”最终成为最终值,但ItemRef1永远不会获得分配的值。我相信这是因为忽略了XPath表达式([@ id ='x'])的属性值部分。因此,两个XPath表达式都被视为相同,并且看起来这导致表达式首先映射到ItemRef1,然后映射到ItemRef2,ItemRef2覆盖ItemRef1映射,因此ItemRef2获胜。

我希望这是由我的语法问题引起的。任何建议将不胜感激。

谢谢, 凯文

1 个答案:

答案 0 :(得分:1)

我领导EclipseLink JAXB (MOXy),此feature是即将发布的EclipseLink 2.3版本的一部分。您可以通过以下方式下载其中一个EclipseLink 2.3.0夜间下载(从3月22日开始)来尝试:

映射将与您在问题中描述的一样:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="Item")
public class Item
{
  ...
  @XmlPath("ItemRefFields/ItemRefField[@id='1']/text()")
  private String ItemRef1 = null;
  @XmlPath("ItemRefFields/ItemRefField[@id='2']/text()")
  private String ItemRef2 = null;
  ...
}

了解更多信息