XmlElement和@XmlAttribute区别描述
-
@XmlElement将java对象的属性映射为xml的节点,在使用@XmlElement时,可通过name属性改变java对象属性在xml中显示的名称。eg:@XmlElement该属性作为xml的element,且可以增加属性(name="NewElementName"),那么生成的xml串的elment的标签是NewElementName
-
@XmlAttribute將被序列化为xml节点中的属性
证明
- 使用@XmlElement,并且带有name属性,修改生成的xml标签
package ;
import ;
import ;
@XmlRootElement(name="rootclass")
public class RootClass {
private EleClassA a;
private EleClassB b;
private String root;
private String rootA;
@XmlElement(name="eleClassA")
public EleClassA getA() {
return a;
}
public void setA(EleClassA a) {
= a;
}
@XmlElement(name="EleclassA")
public EleClassB getB() {
return b;
}
public void setB(EleClassB b) {
= b;
}
public String getRoot() {
return root;
}
public void setRoot(String root) {
= root;
}
public String getRootA() {
return rootA;
}
public void setRootA(String rootA) {
= rootA;
}
}
- 使用@XmlElement,并且不带有name属性
package ;
import ;
import ;
public class EleClassA {
private String eleA;
private String eleB;
private String attrC;
@XmlElement
public String getEleA() {
return eleA;
}
public void setEleA(String eleA) {
= eleA;
}
@XmlElement(name="elebnewname")
public String getEleB() {
return eleB;
}
public void setEleB(String eleB) {
= eleB;
}
@XmlAttribute
public String getAttrC() {
return attrC;
}
public void setAttrC(String attrC) {
= attrC;
}
}
package ;
import ;
import ;
public class EleClassB {
private String attrUserName;
private String attrPassword;
private String eleCode;
@XmlAttribute
public String getAttrUserName() {
return attrUserName;
}
public void setAttrUserName(String attrUserName) {
= attrUserName;
}
@XmlAttribute(name="password")
public String getAttrPassword() {
return attrPassword;
}
public void setAttrPassword(String attrPassword) {
= attrPassword;
}
@XmlElement
public String getEleCode() {
return eleCode;
}
public void setEleCode(String eleCode) {
= eleCode;
}
运行Test1类中main方法,执行结果:
package test;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
public class Test1 {
public static void main(String[] args) {
RootClass rc = new RootClass();
EleClassA a = new EleClassA();
EleClassB b = new EleClassB();
("attrc");
("eleA");
("eleB");
("attrPassword");
("attrUsrName");
("eleCode");
(a);
(b);
("root");
("rootA");
JAXBContext context;
try {
context = ();
Marshaller mar = ();
(Marshaller.JAXB_FORMATTED_OUTPUT, true);
(Marshaller.JAXB_ENCODING, "UTF-8");
StringWriter writer = new StringWriter();
(rc, writer);
(());
} catch (JAXBException e) {
();
}
}
}
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rootclass>
<eleClassA attrC="attrc">
<eleA>eleA</eleA>
<elebnewname>eleB</elebnewname>
</eleClassA>
<EleclassA attrUserName="attrUsrName" password="attrPassword">
<eleCode>eleCode</eleCode>
</EleclassA>
<root>root</root>
<rootA>rootA</rootA>
</rootclass>
总结:
- 可以看出EleClassA这个类中,attrc上使用标签@XmlAttribute,在xml中北设置为eleClassA元素的属性。
- 在RootClass类中,geta上使用注解@XmlElement(name="eleClassA"),在xml中变成了标签,其他的类似,可以看着类上的代码对比结果,来理解两者之间的区别。