我有一个类似的xml:
<alpha>
<beta>
<theta>abcd</theta>
</beta>
</alpha>
我想将theta
元素映射到thetaValue
类MyBean中的属性
@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;
}
}
豆豆
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;
}
}
想要查询更多的信息
问题内容: 我有一个无法控制其生成方式的XML。我想通过将其分解为我手工编写的类来创建一个对象。 其结构的一个片段如下所示: 我该如何处理这种情况?当然,元素数是可变的。 问题答案: 如果使用以下对象模型,则每个未映射的key_#元素都将保留为org.w3c.dom.Element的实例: 如果任何元素对应于使用@XmlRootElement批注映射的类,则可以使用@XmlAnyElement(l
问题内容: 鉴于: 如何注释,以便XML为: 问题答案: 您可以利用注释执行以下操作。 oo 酒吧 想要查询更多的信息 http://blog.bdoughan.com/2011/06/jaxb-and-complex-types-with-simple.html
我试图映射一个bean,其中包含一些JAXB元素,如@XmlSee同样、@XmlElement、@XmlschemaType作为该类的属性。 现在,我面临着下面的问题时,使用mapSTRt映射。 > bean个人客户没有被映射。我没有在响应中看到它。但是当使用dozer时,它工作得很好。我所需要做的就是在dozer配置xml中的映射中定义它。我在mapSTRt中尝试了类似的事情。我在mapper接
问题内容: 我正在尝试映射一个具有一些JAXB元素(如@ XmlSeeAlso,@ XmlElement,@ XmlSchemaType)作为该类属性的bean。 现在,当使用mapStruct映射时,我面临以下问题。 Bean PersonalCustomer没有被映射。我没有在回复中看到它。但是在使用推土机时它可以完美地工作。我需要做的就是在dozer config xml中的映射中定义它。我
问题内容: 我创建了一种方法来解组xml(item.xml)文件。但是,如果有多个元素,如何遍历所有元素并使它们显示? 我的代码如下: 如果我的xml是 如何获取所有显示的值?谁能帮我? 问题答案: 我在大学的一些项目中使用过JAXB。据我所记得,您应该返回一个对象(例如),然后查询该对象以检索其中包含的元素。 因此,您的xml应该如下所示: 此时,您的 Java 代码将是:
我有下面这样的jaxb类,我希望我的xmlAdapter格式化日期值,我得到了异常? 原因:java。lang.RuntimeException:com。太阳xml。绑定v2。运行时。IllegalAnnotationsException:1 IllegalAnnotationExceptions计数无效@XmlElementRef:Type“class java.lang.String”或其任何