【问题标题】:JAXB Attribute as Element ValueJAXB 属性作为元素值
【发布时间】:2017-05-22 21:46:16
【问题描述】:

我有定义为

的 XML
<ROOT>
    <CHILD1 VALUE=""/>
    <CHILD2 VALUE=""/>
</ROOT>

有什么方法可以将 VALUE 属性作为元素的值,而不是将 CHILD1 视为具有 VALUE 属性的 ComplexType 以使其适合这个 pojo?

@XmlRootElement(name="ROOT")
public class Root {

    @XmlElement(name="CHILD1")
    private String child1;

    @XmlElement(name="CHILD2")
    private String child2;
}

【问题讨论】:

    标签: java xml jaxb


    【解决方案1】:

    JAXB 中有一些自定义绑定功能:https://docs.oracle.com/javase/tutorial/jaxb/intro/custom.html 但这对于我猜不太重要的事情来说会相当复杂。

    如果您的 Java Pojo 没有生成,您可以简单地添加方法来直接访问子字段,例如Root.getChild1String() 会调用 Root.getChild1().getValue()

    或者您可以更改 xml 架构。

    【讨论】:

      【解决方案2】:

      我最终编写了一个适配器来转换属性以进行反序列化。

      @XmlElement(name = "CHILD1")
      @XmlJavaTypeAdapter(ValueAdapter.class)
      private String child1;
      
      public class ValueAdapter extends XmlAdapter<Object, String> {
          private static String VALUE = "VALUE";
          @Override
          public String unmarshal(Object e) throws Exception {
              if (e instanceof ElementNSImpl && ((ElementNSImpl)e).hasAttribute(VALUE)) {
                  return ((ElementNSImpl)e).getAttribute(VALUE);
              }
              return null;
          }
      
          @Override
          public Object marshal(String s) throws Exception {
              return null;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多