使用EclipseLink MOXy JAXB实现,我正在尝试使用@XmlPath批注根据元素属性的值获取元素值。我似乎无法让它发挥作用。这支持了吗?
XML摘录:
<Item>
...
<ItemRefFields>
<ItemRefField id="1">12345</ItemRefField>
<ItemRefField id="2">blah</ItemRefField>
</ItemRefFields>
</Item>
@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获胜。
我希望这是由我的语法问题引起的。任何建议将不胜感激。
谢谢, 凯文
答案 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;
...
}
了解更多信息