Java 使用相同的名称标记创建@XmlElement 2次
我想解组一个Java 使用相同的名称标记创建@XmlElement 2次,java,xml,jaxb,unmarshalling,Java,Xml,Jaxb,Unmarshalling,我想解组一个XML,并且节点的元素存在于多个类文件中,我需要知道是否可以使用相同的名称创建@xmlement标记2次,并将同一节点传递给两个不同的类 我有以下XML: <data> <properties> <id>ID123</id> <name>sss</name> <note>note</note> </properties&
XML
,并且节点的元素存在于多个类文件中,我需要知道是否可以使用相同的名称创建@xmlement
标记2次,并将同一节点传递给两个不同的类
我有以下XML:
<data>
<properties>
<id>ID123</id>
<name>sss</name>
<note>note</note>
</properties>
</data>
我在prop1
类中有id
,name
,在prop2
类中有note
。所有元素都在一个节点下。
我可以使用@xmlement
标记两次相同名称的delcare数据类,并将同一节点传递给两个不同的类吗?我尝试了这个,但只能创建prop1
类的实例
也在寻找其他选项来处理此场景首先,您真的需要这样做吗。为什么不能拥有properties类,从中可以从Note部分和Id/Name部分获得包装器
一种方法是将xml属性映射为xml中的属性,并使用封送/解封送事件将其转换为属性类
public class Properties {
@XMLElement
String id;
@XMLElement
String name;
@XMLElement
String note;
}
public class Data {
@XMLElement
Properties properties;
@XMLTransient
Prop1 prop1
....
void afterUnmarshal(Unmarshaller unm, Object parent) {
prop1.id = properties.id;
prop1.name = prperites.name;
prop2.note = properties.note;
};
boolean beforeMarshal(Marshaller mar) {
prop1 = new Prop1(properties.id,properties.name);
prop2 = new Prop2(properties.note);
};
}
因此,您需要额外的容器(属性)来存储该值,但它可以用于任何jaxb实现
为了避免使用容器,可以使用XMLAdapter和jaxb扩展从xml节点提取必要的部分。
您可以在此处找到您案例的部分示例说明:
但它基于jaxb的eclipse实现,需要大量代码
public class Properties {
@XMLElement
String id;
@XMLElement
String name;
@XMLElement
String note;
}
public class Data {
@XMLElement
Properties properties;
@XMLTransient
Prop1 prop1
....
void afterUnmarshal(Unmarshaller unm, Object parent) {
prop1.id = properties.id;
prop1.name = prperites.name;
prop2.note = properties.note;
};
boolean beforeMarshal(Marshaller mar) {
prop1 = new Prop1(properties.id,properties.name);
prop2 = new Prop2(properties.note);
};
}