如何将xml元素绑定到对象成员变量中?

时间:2014-06-05 06:29:10

标签: java xml jaxb unmarshalling moxy

我正在尝试使用moxy将xml解组为对象.Below是xml的示例。

<root>
    <name>
        <firstname>value</firstname>
    </name> 
    <address>value of address</address>
</root>

以下是我想要映射的课程。

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import org.eclipse.persistence.oxm.annotations.XmlPath;

@XmlRootElement(name="root")
@XmlAccessorType(XmlAccessType.FIELD)

public class Response {
  @XmlPath("name/firstname/text()")
  String name;
  Address address;
}

class Address {
  String addressline;
}

现在如何在XML中获取地址标记的值并将其绑定到类Address的地址行变量。

2 个答案:

答案 0 :(得分:0)

您需要在@XmlValue属性上使用addressline注释。

@XmlAccessorType(XmlAccessType.FIELD)
class Address {
    @XmlValue
    String addressline;
}

答案 1 :(得分:0)

这是对此处链接的类似(但不是完全相同)问题的答案:

我们问题的解决方案也与此问题有关。对于上述问题,简短回答(as noted 那里)是将@ XmlValue 属性与getMessageText()一起使用,而不是@XmlElement。我已经使用了'XmlValue',它仍然无效,所以我恢复了XmlElement。

XmlValue不是that case中的完整解决方案。我们还发现我们需要:

  • @ XmlAccessorType (XmlAccessType.NONE)

显然是因为课堂上的其他东西。显然,JABX尝试将每个get / set属性与XML匹配,显然它很混乱,如果存在非XML POJO属性(我推断),则不能或不会处理我的XmlValue。

  @XmlAccessorType( XmlAccessType.NONE )
  @XmlRootElement(name = "announcement")
  public class Announcement
  {
      ... 

      @XmlValue
      public  String getMessageText(){
          return this.messageText;
      }
  }

经验教训。如果您的JAXB没有按照您认为的那样做,我已经把它弄糊涂了。感谢您的帮助,知道需要做什么,让我们找到我们还需要的其他东西。