JAXB元素映射

我有一个类似于的xml:

  abcd   

我想将theta元素映射到类MyBean中的属性thetaValue

 @XmlRootElement(name = "alpha") public class MyBean { private String thetaValue; public String getThetaValue() { return this.thetaValue; } public void setThetaValue(String thetaValue) { this.thetaValue= thetaValue; } } 

我有什么方法可以做到这一点? 我正在使用JDK 1.6附带的jaxb

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


使用任何JAXB(JSR-222)实现

使用任何JAXB(JSR-222)实现,您可以使用XmlAdapter来映射此用例。

ThetaValueAdapter

 package forum9799081; import javax.xml.bind.annotation.adapters.XmlAdapter; public class ThetaValueAdapter extends XmlAdapter { @Override public Beta marshal(String string) throws Exception { Beta beta = new Beta(); beta.theta = string; return beta; } @Override public String unmarshal(Beta beta) throws Exception { return beta.theta; } public static class Beta { public String theta; } } 

为myBean

 package forum9799081; import javax.xml.bind.annotation.*; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; @XmlRootElement(name = "alpha") public class MyBean { private String thetaValue; @XmlElement(name="beta") @XmlJavaTypeAdapter(ThetaValueAdapter.class) public String getThetaValue() { return this.thetaValue; } public void setThetaValue(String thetaValue) { this.thetaValue = thetaValue; } } 

演示

 package forum9799081; import java.io.File; import javax.xml.bind.*; public class Demo { public static void main(String[] args) throws Exception { JAXBContext jc = JAXBContext.newInstance(MyBean.class); File xml = new File("src/forum9799081/input.xml"); Unmarshaller unmarshaller = jc.createUnmarshaller(); MyBean myBean = (MyBean) unmarshaller.unmarshal(xml); Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(myBean, System.out); } } 

input.xml中/输出

    abcd   

使用EclipseLink JAXB(MOXy)

使用MOXy,您可以使用@XmlPath扩展来实现相同的映射:

 package forum9799081; import javax.xml.bind.annotation.*; import org.eclipse.persistence.oxm.annotations.XmlPath; @XmlRootElement(name = "alpha") public class MyBean { private String thetaValue; @XmlPath("beta/theta/text()") public String getThetaValue() { return this.thetaValue; } public void setThetaValue(String thetaValue) { this.thetaValue = thetaValue; } } 

欲获得更多信息