java 关于xml的引文,自动生成xml文件 - @XML*
java 关于xml的注解,自动生成xml文件 - @XML***
用的是jdk自带的javax.xml.bind.JAXBContext将对象和xml字符串进行相互转换。
运行Test1类中main方法,执行结果:
用的是jdk自带的javax.xml.bind.JAXBContext将对象和xml字符串进行相互转换。
如果对要生成的 xml 格式有点些许的限制,就会对生成xml的对象就需要进行些许控制,控制对象的一个最可行的办法就是用注解。
(jdk 1.6 api:http://www.cs.uic.edu/~mcpc/Java_Docs/api/index.html?javax/xml/bind/JAXBContext.html)
比较常用的几个:
@XmlRootElement:根节点
@XmlAttribute:该属性作为xml的attribute
@XmlElement:该属性作为xml的element,且可以增加属性(name="NewElementName"),那么生成的xml串的elment的标签是NewElementName
示例:
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(); } } } 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; } } 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; } } 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方法,执行结果:
<?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>