【问题标题】:How to bind a xml element into an object member variable?如何将 xml 元素绑定到对象成员变量中?
【发布时间】:2014-06-05 06:29:09
【问题描述】:

我正在尝试使用 moxy 将 xml 解组为对象。下面是 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 中地址标签的值并将其绑定到类地址的地址线变量。

【问题讨论】:

    标签: java xml jaxb unmarshalling moxy


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢你的回答。这真的很有帮助。但是如果我的 Address 类包含另一个名为 addresslinetwo 的变量,我想将它映射到 XML 中以 作为父元素的元素。确切地说,这是我的实际问题。
    • @cgeek - 您可以使用@XmlPath(".") 注释address 属性。
    • 使用 Jackson 2 和 Jersey,我必须用 Jackson 的 '@JsonValue' 注释替换 '@XmlValue' 注释才能使其工作
    【解决方案2】:

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

    我们的问题的解决方案也与这个问题有关。对于上述问题,简短的回答 (as notedthere) 是使用带有 getMessageText() 的 @XmlValue 属性,而不是 @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 没有做您认为应该做的事情,我把它弄糊涂了。感谢您的帮助,知道需要做什么,让我们找到我们还需要什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-17
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      相关资源
      最近更新 更多