1

我正在尝试使用 contains 函数通过带有 XPath 的 EclipseLink MOXy 解组 XML 数据流。

当我将示例 XPath 直接应用于示例 XML 数据流时,我得到了正确的返回值 (Ref_number_1)。但是,当我使用 MOXy 解组它时,为 refNumber1 设置的值是“Ref_number_2”。

MOXy 不支持这种类型的 XPath 吗?看起来它至少可以理解它,因为它没有抛出错误,只是设置了错误的值。

有没有人有这种事情的经验?知道更好的方法吗?

谢谢你的帮助。

元帅代码:

String s = //xml stream from restful service (see xml example below);
StringReader sr = new StringReader(s);
ReferenceNumber refNum = (ReferenceNumber)marshaller.unmarshal(
            new StreamSource(sr));

会员注释:

@XmlPath("Header/ReferenceNumbers/ReferenceNumber[contains(ReferenceNumberType, \"REF_NUMBER_TYPE_1\")]/ReferenceNumber/text()")
private String refNumber1;

XML 数据:

<?xml version="1.0" encoding="UTF-8"?>
<Document>
  <Header>      
    <ReferenceNumbers>
      <ReferenceNumber>
        <ReferenceNumber>Ref_number_1</ReferenceNumber>
        <ReferenceNumberType>REF_NUMBER_TYPE_1</ReferenceNumberType>
      </ReferenceNumber>
      <ReferenceNumber>
        <ReferenceNumber>Ref_number_2</ReferenceNumber>
        <ReferenceNumberType>REF_NUMBER_TYPE_2</ReferenceNumberType>
      </ReferenceNumber>
    </ReferenceNumbers>
  </Header>
</Document>
4

1 回答 1

1

注意: 我是EclipseLink JAXB (MOXy)负责人,也是JAXB (JSR-222)专家组的成员。

目前 MOXy 不支持这种形式的 XPath。目前,条件检查必须针对元素中包含的属性,例如(参见:http ://blog.bdoughan.com/2011/03/map-to-element-based-on-attribute-value.html )。

@XmlPath("personal-info/name[@type='first']/text()")
String firstName;

我输入了以下错误,以便我们改进对@XmlPath注释进行的验证:

我也对您问题中描述的用例感兴趣。您是否介意为此输入针对 MOXy 组件的增强要求:

于 2012-12-21T19:20:12.003 回答