java 关于xml的注解,自动生成xml文件 - @XML

用的是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
 
        示例:    
       
[java]  view plain copy
 
  1. package test;  
  2.   
  3. import java.io.StringWriter;  
  4.   
  5. import javax.xml.bind.JAXBContext;  
  6. import javax.xml.bind.JAXBException;  
  7. import javax.xml.bind.Marshaller;  
  8.   
  9. import test.bean.EleClassA;  
  10. import test.bean.EleClassB;  
  11. import test.bean.RootClass;  
  12.   
  13. public class Test1 {  
  14.   
  15.     public static void main(String[] args) {  
  16.         RootClass rc = new RootClass();  
  17.         EleClassA a = new EleClassA();  
  18.         EleClassB b = new EleClassB();  
  19.           
  20.         a.setAttrC("attrc");  
  21.         a.setEleA("eleA");  
  22.         a.setEleB("eleB");  
  23.           
  24.         b.setAttrPassword("attrPassword");  
  25.         b.setAttrUserName("attrUsrName");  
  26.         b.setEleCode("eleCode");  
  27.           
  28.         rc.setA(a);  
  29.         rc.setB(b);  
  30.         rc.setRoot("root");  
  31.         rc.setRootA("rootA");  
  32.           
  33.           
  34.         JAXBContext context;  
  35.         try {  
  36.             context = JAXBContext.newInstance(RootClass.class);  
  37.             Marshaller mar = context.createMarshaller();  
  38.             mar.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);  
  39.             mar.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");  
  40.               
  41.             StringWriter writer = new StringWriter();  
  42.               
  43.             mar.marshal(rc, writer);  
  44.               
  45.             System.out.println(writer.toString());  
  46.         } catch (JAXBException e) {  
  47.             e.printStackTrace();  
  48.         }  
  49.           
  50.     }  
  51. }  
  52.   
  53.   
  54. package test.bean;  
  55.   
  56. import javax.xml.bind.annotation.XmlElement;  
  57. import javax.xml.bind.annotation.XmlRootElement;  
  58.   
  59. @XmlRootElement(name="rootclass")  
  60. public class RootClass {  
  61.   
  62.     private EleClassA a;  
  63.     private EleClassB b;  
  64.     private String root;  
  65.     private String rootA;  
  66.       
  67.     @XmlElement(name="eleClassA")  
  68.     public EleClassA getA() {  
  69.         return a;  
  70.     }  
  71.     public void setA(EleClassA a) {  
  72.         this.a = a;  
  73.     }  
  74.     @XmlElement(name="EleclassA")  
  75.     public EleClassB getB() {  
  76.         return b;  
  77.     }  
  78.     public void setB(EleClassB b) {  
  79.         this.b = b;  
  80.     }  
  81.     public String getRoot() {  
  82.         return root;  
  83.     }  
  84.     public void setRoot(String root) {  
  85.         this.root = root;  
  86.     }  
  87.     public String getRootA() {  
  88.         return rootA;  
  89.     }  
  90.     public void setRootA(String rootA) {  
  91.         this.rootA = rootA;  
  92.     }  
  93.       
  94. }  
  95.   
  96.   
  97. package test.bean;  
  98.   
  99. import javax.xml.bind.annotation.XmlAttribute;  
  100. import javax.xml.bind.annotation.XmlElement;  
  101.   
  102. public class EleClassA {  
  103.   
  104.     private String eleA;  
  105.     private String eleB;  
  106.       
  107.     private String attrC;  
  108.   
  109.     @XmlElement  
  110.     public String getEleA() {  
  111.         return eleA;  
  112.     }  
  113.   
  114.     public void setEleA(String eleA) {  
  115.         this.eleA = eleA;  
  116.     }  
  117.   
  118.     @XmlElement(name="elebnewname")  
  119.     public String getEleB() {  
  120.         return eleB;  
  121.     }  
  122.   
  123.     public void setEleB(String eleB) {  
  124.         this.eleB = eleB;  
  125.     }  
  126.   
  127.     @XmlAttribute()  
  128.     public String getAttrC() {  
  129.         return attrC;  
  130.     }  
  131.   
  132.     public void setAttrC(String attrC) {  
  133.         this.attrC = attrC;  
  134.     }  
  135.       
  136. }  
  137.   
  138.   
  139. package test.bean;  
  140.   
  141. import javax.xml.bind.annotation.XmlAttribute;  
  142. import javax.xml.bind.annotation.XmlElement;  
  143.   
  144. public class EleClassB {  
  145.   
  146.     private String attrUserName;  
  147.     private String attrPassword;  
  148.       
  149.     private String eleCode;  
  150.       
  151.     @XmlAttribute  
  152.     public String getAttrUserName() {  
  153.         return attrUserName;  
  154.     }  
  155.     public void setAttrUserName(String attrUserName) {  
  156.         this.attrUserName = attrUserName;  
  157.     }  
  158.     @XmlAttribute(name="password")  
  159.     public String getAttrPassword() {  
  160.         return attrPassword;  
  161.     }  
  162.     public void setAttrPassword(String attrPassword) {  
  163.         this.attrPassword = attrPassword;  
  164.     }  
  165.     @XmlElement  
  166.     public String getEleCode() {  
  167.         return eleCode;  
  168.     }  
  169.     public void setEleCode(String eleCode) {  
  170.         this.eleCode = eleCode;  
  171.     }  
  172.       
  173.       
  174. }  

运行Test1类中main方法,执行结果:
[html]  view plain copy
 
  1. xml version="1.0" encoding="UTF-8" standalone="yes"?>  
  2. <rootclass>  
  3.     <eleClassA attrC="attrc">  
  4.         <eleA>eleAeleA>  
  5.         <elebnewname>eleBelebnewname>  
  6.     eleClassA>  
  7.     <EleclassA attrUserName="attrUsrName" password="attrPassword">  
  8.         <eleCode>eleCodeeleCode>  
  9.     EleclassA>  
  10.     <root>rootroot>  
  11.     <rootA>rootArootA>  
  12. rootclass>  

你可能感兴趣的:(开源框架)