2

我有以下结构:

@XMLTransient
public abstract class Foo {
   protected String name;
}

@XmlRootElement
@XmlType(propOrder={"name"})
public class BarX extends Foo {

   public String getXThing() {
      return name;
   }

   public void setXThing(String thing) {
      name = thing;
   }
}

@XmlRootElement
@XmlType(propOrder={"name"})
public class BarY extends Foo {

   public String getYBlah() {
      return name;
   }

   public void setYBlah(String blah) {
      name = blah;
   }
}

在 XML 中,我需要 BarX 而不是name标签thing,而对于 BarY,我想拥有blah而不是name. 有可能吗,我怎么能得到这个?

4

1 回答 1

1

您可以执行以下操作(您已经非常接近了):

package forum11340316;

import javax.xml.bind.annotation.XmlTransient;

@XmlTransient
public abstract class Foo {
   protected String name;
}

酒吧X

package forum11340316;

import javax.xml.bind.annotation.*;

@XmlRootElement
@XmlType(propOrder={"XThing"})
public class BarX extends Foo {

   @XmlElement(name="thing")
   public String getXThing() {
      return name;
   }

   public void setXThing(String thing) {
      name = thing;
   }

}

package forum11340316;

import javax.xml.bind.annotation.*;

@XmlRootElement
@XmlType(propOrder={"YBlah"})
public class BarY extends Foo {

   @XmlElement(name="blah")
   public String getYBlah() {
      return name;
   }

   public void setYBlah(String blah) {
      name = blah;
   }

}

演示

package forum11340316;

import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(BarX.class, BarY.class);
        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        BarX barX = new BarX();
        barX.setXThing("XThing");
        marshaller.marshal(barX, System.out);

        BarY barY = new BarY();
        barY.setYBlah("YBlah");
        marshaller.marshal(barY, System.out);
    }

}

输出

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<barX>
    <thing>XThing</thing>
</barX>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<barY>
    <blah>YBlah</blah>
</barY>

了解更多信息

于 2012-07-05T13:13:13.680 回答