2

使用 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 获胜。

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

谢谢,凯文

4

1 回答 1

1

I lead EclipseLink JAXB (MOXy), and this feature is part of the upcoming EclipseLink 2.3 release. You can try it today by downloading one of the EclipseLink 2.3.0 nightly downloads (starting March 22) from:

The mapping will be just as you described in your question:

@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;
  ...
}

For more information

于 2011-03-17T15:03:56.997 回答