xml反射

利用反射来将xml里面的内容添加到对象里面:

自定义一个xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 
 3 <snm id="asd" name="asdasdas">
 4     <from>222</from>
 5     <to>1234</to>
 6     <context>I Miss You!</context>
 7     <fromuser>
 8         <user>时间</user>
 9         <nums>232152</nums>
10     </fromuser>
11 </snm>

定义一个类:

 1 package xml;
 2 
 3 import java.util.Arrays;
 4 
 5 public class Student {
 6 private String name;
 7 private String name1;
 8 private String name2;
 9 private String name3;
10 
11 public String toString() {
12     return "Student [name=" + name2 + "]";
13 }
14 private  void hello(String hello) {
15     System.out.println("HelloWorld");
16 }
17 private  void hello1() {
18     System.out.println("HelloWorld");
19 }
20 private  void hello2() {
21     System.out.println("HelloWorld");
22 }
23 private  void hello3() {
24     System.out.println("HelloWorld");
25 }
26 private  void hello4(int[] hello) {
27     System.out.println("HelloWorld4444444");
28     System.out.println(hello);
29     Arrays.sort(hello);
30     System.out.println(Arrays.toString(hello));
31 }
32 
33 
34 
35 }

获取里面的内容以及各种属性:

 1 package xml;
 2 
 3 import java.io.InputStream;
 4 import java.lang.reflect.Field;
 5 import java.lang.reflect.Method;
 6 
 7 import javax.xml.parsers.DocumentBuilder;
 8 import javax.xml.parsers.DocumentBuilderFactory;
 9 
10 import org.junit.Test;
11 import org.w3c.dom.Document;
12 import org.w3c.dom.Element;
13 import org.w3c.dom.NamedNodeMap;
14 import org.w3c.dom.Node;
15 import org.w3c.dom.NodeList;
16 
17 public class TestXml {
18     
19     @Test
20     public void testXml() throws Exception {
21         //解析xml
22         DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
23         InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("smn.xml");
24         System.out.println("in是:"+in.hashCode());
25         Document parse = builder.parse(in);//1144748368   1050 435 101 550
26         //获取父节点
27         Element element = parse.getDocumentElement();
28         System.out.println(element);
29         
30         //获取父节点里面的属性
31         String string = element.getAttribute("name");
32         System.out.println("~~~~~~~~~~~~~~"+string);
33         
34         //获取父节点
35         NodeList childNodes = element.getChildNodes();
36         for (int i = 0; i < childNodes.getLength(); i++) {
37             //获取所有子节点
38             Node item = childNodes.item(i);
39             System.out.println("IIIIIIIIIIIIIIIII"+item);
40         }
41         System.out.println("qqqqqqqqqqq"+childNodes);
42         System.out.println(childNodes==element);//true
43         System.out.println(childNodes.equals(element));//true
44         
45         
46         String textContent = childNodes.item(1).getTextContent();
47         System.out.println("里面的东西"+textContent);
48         //获取类的字节码文件
49         Class<?> cls=Student.class;
50         //获取一个字节码对象
51         Object obj=cls.newInstance();
52         //获取类的所有字段
53         Field[] declaredFields = cls.getDeclaredFields();
54         for (Field field : declaredFields) {
55             
56             System.out.println("字段"+field);
57             //可以给字段赋值
58             if(field.getName().equals("name2")){
59                 field.setAccessible(true);
60                 
61                 field.set(obj, "的风格好久没看,");
62             }
63         }
64         System.out.println("赋值"+obj);
65         
66         //获取类里面的所有方法
67         Method[] declaredMethods = cls.getDeclaredMethods();
68         int []array={
69             10,5,9,3,20,7    
70         };
71         for (Method method : declaredMethods) {
72             method.setAccessible(true);
73             if(method.getName().equals("hello4")){
74                 //使用类里面的私有方法
75                 method.invoke(obj,array);
76             }
77             System.out.println(method);
78         }        
79     }
80 /*    static void hello(Node node){
81         NodeList childNodes = node.getChildNodes();
82         for (int i = 0; i < childNodes.getLength(); i++) {
83             System.out.println(childNodes.item(i).getTextContent());
84         }
85     }*/
86 }

这样就能将xml里面的属性内容赋值到对象里面了

控制台里面的东西

in是:1144748369
[snm: null]
~~~~~~~~~~~~~~asdasdas
IIIIIIIIIIIIIIIII[#text:
    ]
IIIIIIIIIIIIIIIII[from: null]
IIIIIIIIIIIIIIIII[#text:
    ]
IIIIIIIIIIIIIIIII[to: null]
IIIIIIIIIIIIIIIII[#text:
    ]
IIIIIIIIIIIIIIIII[context: null]
IIIIIIIIIIIIIIIII[#text:
    ]
IIIIIIIIIIIIIIIII[fromuser: null]
IIIIIIIIIIIIIIIII[#text:
]
qqqqqqqqqqq[snm: null]
true
true
里面的东西222
字段private java.lang.String xml.Student.name
字段private java.lang.String xml.Student.name1
字段private java.lang.String xml.Student.name2
字段private java.lang.String xml.Student.name3
赋值Student [name=的风格好久没看,]
public java.lang.String xml.Student.toString()
HelloWorld4444444
[I@69663380
[3, 5, 7, 9, 10, 20]
private void xml.Student.hello4(int[])
private void xml.Student.hello(java.lang.String)
private void xml.Student.hello1()
private void xml.Student.hello3()
private void xml.Student.hello2()

 

posted @ 2017-04-01 09:16  时间带我去旅行  阅读(157)  评论(0编辑  收藏  举报