[英]JAXB Element mapping
我有一個類似的xml:
<alpha>
<beta>
<theta>abcd</theta>
</beta>
</alpha>
我想將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<ThetaValueAdapter.Beta, String> {
@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中/輸出
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<alpha>
<beta>
<theta>abcd</theta>
</beta>
</alpha>
使用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;
}
}
欲獲得更多信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.