XmlElement和@XmlAttribute区别描述
- @XmlElement将java对象的属性映射为xml的节点,在使用@XmlElement时,可通过name属性改变java对象属性在xml中显示的名称。eg:@XmlElement该属性作为xml的element,且可以增加属性(name="NewElementName"),那么生成的xml串的elment的标签是NewElementName
- @XmlAttribute將被序列化为xml节点中的属性
证明
- 使用@XmlElement,并且带有name属性,修改生成的xml标签
package test.bean; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @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) { this.a = a; } @XmlElement(name="EleclassA") public EleClassB getB() { return b; } public void setB(EleClassB b) { this.b = b; } public String getRoot() { return root; } public void setRoot(String root) { this.root = root; } public String getRootA() { return rootA; } public void setRootA(String rootA) { this.rootA = rootA; } }
讯享网
- 使用@XmlElement,并且不带有name属性
讯享网package test.bean; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; public class EleClassA { private String eleA; private String eleB; private String attrC; @XmlElement public String getEleA() { return eleA; } public void setEleA(String eleA) { this.eleA = eleA; } @XmlElement(name="elebnewname") public String getEleB() { return eleB; } public void setEleB(String eleB) { this.eleB = eleB; } @XmlAttribute public String getAttrC() { return attrC; } public void setAttrC(String attrC) { this.attrC = attrC; } }
- 使用@XmlAttribute
package test.bean; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; public class EleClassB { private String attrUserName; private String attrPassword; private String eleCode; @XmlAttribute public String getAttrUserName() { return attrUserName; } public void setAttrUserName(String attrUserName) { this.attrUserName = attrUserName; } @XmlAttribute(name="password") public String getAttrPassword() { return attrPassword; } public void setAttrPassword(String attrPassword) { this.attrPassword = attrPassword; } @XmlElement public String getEleCode() { return eleCode; } public void setEleCode(String eleCode) { this.eleCode = eleCode; }
运行Test1类中main方法,执行结果:
讯享网package test; import java.io.StringWriter; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import test.bean.EleClassA; import test.bean.EleClassB; import test.bean.RootClass; public class Test1 { public static void main(String[] args) { RootClass rc = new RootClass(); EleClassA a = new EleClassA(); EleClassB b = new EleClassB(); a.setAttrC("attrc"); a.setEleA("eleA"); a.setEleB("eleB"); b.setAttrPassword("attrPassword"); b.setAttrUserName("attrUsrName"); b.setEleCode("eleCode"); rc.setA(a); rc.setB(b); rc.setRoot("root"); rc.setRootA("rootA"); JAXBContext context; try { context = JAXBContext.newInstance(RootClass.class); Marshaller mar = context.createMarshaller(); mar.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); mar.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); StringWriter writer = new StringWriter(); mar.marshal(rc, writer); System.out.println(writer.toString()); } catch (JAXBException e) { e.printStackTrace(); } } }
<?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中变成了标签,其他的类似,可以看着类上的代码对比结果,来理解两者之间的区别。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/27107.html