应用java反射机制将一个xml文件注入到与其对应的java类中Word文档格式.docx

上传人:b****3 文档编号:6618271 上传时间:2023-05-07 格式:DOCX 页数:8 大小:16.02KB
下载 相关 举报
应用java反射机制将一个xml文件注入到与其对应的java类中Word文档格式.docx_第1页
第1页 / 共8页
应用java反射机制将一个xml文件注入到与其对应的java类中Word文档格式.docx_第2页
第2页 / 共8页
应用java反射机制将一个xml文件注入到与其对应的java类中Word文档格式.docx_第3页
第3页 / 共8页
应用java反射机制将一个xml文件注入到与其对应的java类中Word文档格式.docx_第4页
第4页 / 共8页
应用java反射机制将一个xml文件注入到与其对应的java类中Word文档格式.docx_第5页
第5页 / 共8页
应用java反射机制将一个xml文件注入到与其对应的java类中Word文档格式.docx_第6页
第6页 / 共8页
应用java反射机制将一个xml文件注入到与其对应的java类中Word文档格式.docx_第7页
第7页 / 共8页
应用java反射机制将一个xml文件注入到与其对应的java类中Word文档格式.docx_第8页
第8页 / 共8页
亲,该文档总共8页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

应用java反射机制将一个xml文件注入到与其对应的java类中Word文档格式.docx

《应用java反射机制将一个xml文件注入到与其对应的java类中Word文档格式.docx》由会员分享,可在线阅读,更多相关《应用java反射机制将一个xml文件注入到与其对应的java类中Word文档格式.docx(8页珍藏版)》请在冰点文库上搜索。

应用java反射机制将一个xml文件注入到与其对应的java类中Word文档格式.docx

importcn.yunweb.weather.util.XMLUtil;

publicclassXMLBeanUtil{

/**

*将xml文档中的一个节点注入到与之对应的XMLBean对象中

*@paramo对应节点类

*@parameXml文档节点

*@throwsException

*/

privatestaticvoidinjectNodeToXMLBean(Objecto,Nodee)

{

//1)注入属性值

injectAttributes(o,e);

//2)注入节点-------只处理元素型子节点或仅有一个文本型子节点的情况(其他情况忽略)

NodeListchildNodes=e.getChildNodes();

//得到文本子节点

ArrayList<

Node>

tl=newArrayList<

();

for(inti=0;

i<

childNodes.getLength();

i++)

if(childNodes.item(i).getNodeType()==Node.TEXT_NODE)

tl.add(childNodes.item(i));

}

//得到元素子节点

nl=newArrayList<

if(childNodes.item(i).getNodeType()==Node.ELEMENT_NODE)

nl.add(childNodes.item(i));

//2.1处理文本型子节点(若没有元素子节点而且只有一个文本子节点时才给nodeText赋值)

if(nl.size()==0&

&

tl.size()==1)

StringfieldName="

nodeText"

;

StringfieldValue=tl.get(0).getNodeValue();

try{

Fieldfield=o.getClass().getDeclaredField(fieldName);

field.set(o,fieldValue);

}catch(Exceptionee){

System.out.println("

类:

"

+o.getClass().getName()+"

中没有属性("

+fieldName+"

)或赋值错误!

);

if(nl.size()<

1)

return;

//2.2处理元素型子节点

/**分为元素唯一、元素互相不同、元素相同三种情况

*注意:

不考虑元素型子节点中既有同名节点又有不同名节点的情况

*这种情况将不能正确的给对象进行注入

*

//2.2.1元素唯一

if(nl.size()==1)

injectSingleObjectField(o,nl.get(0));

//2.2.2元素相同

if(nl.get(0).getNodeName().equals(nl.get

(1).getNodeName()))//只用判断前两个元素名是否相同就行

injectArrayField(o,nl);

}else{

//2.2.3元素互不相同

nl.size();

injectSingleObjectField(o,nl.get(i));

*给节点属性对应的成员变量进行注入

*@paramattrField拥有这些属性的节点对应的成员对象

*@paramnode与该对象对应的节点

privatestaticvoidinjectAttributes(ObjectattrField,Nodenode){

//得到节点的属性节点

NamedNodeMapattrs=node.getAttributes();

ClassthisClass=attrField.getClass();

attrs.getLength();

StringfieldName=attrs.item(i).getNodeName();

StringfieldValue=attrs.item(i).getNodeValue();

Fieldfield=thisClass.getDeclaredField(fieldName);

field.set(attrField,fieldValue);

//System.out.println("

属性:

注入成功"

+attrField.getClass().getName()+"

"

*给单个对象的成员变量进行注入

*@paramsingleField要注入的成员变量对象

privatestaticvoidinjectSingleObjectField(ObjectsingleField,Nodenode)

//得到该元素的对应类名

StringfieldName=node.getNodeName();

ClassfieldClass=null;

StringclassName=null;

Field

field=singleField.getClass().getDeclaredField(fieldName);

fieldClass=field.getType();

className=fieldClass.getName();

Object

subObject=Class.forName(className).getConstructors()[0].newInstance(singleField);

field.set(singleField,subObject);

XMLBeanUtil.injectNodeToXMLBean(subObject,node);

+singleField.getClass().getName()+"

*给数组型的成员变量进行注入

*@paramarrayField要注入的数组成员变量对象

*@paramnodeList该数组对象中的所有对象对应的节点列表

privatestaticvoidinjectArrayField(Object

arrayField,ArrayList<

nodeList)

StringfieldName=nodeList.get(0).getNodeName();

field=arrayField.getClass().getDeclaredField(fieldName);

ClasscomponentType=fieldClass.getComponentType();

//去掉数组型的前两个字符"

[L"

可以得到数组中元素的类名和最后的”;

“号

className=fieldClass.getName().substring

(2).replace("

"

sub=java.lang.reflect.Array.newInstance(componentType,

nodeList.size());

nodeList.size();

oi=Class.forName(className).getConstructors()[0].newInstance(arrayField);

java.lang.reflect.Array.set(sub,i,oi);

XMLBeanUtil.injectNodeToXMLBean(oi,

nodeList.get(i));

field.set(arrayField,sub);

+arrayField.getClass().getName()+"

ee.printStackTrace();

*把指定文件中的数据初始化到对象中

*@paramdata与该文件关联的XMLBean对象

*@paramfilenamexml文件名

publicstaticsynchronizedvoidinitXMLBean(XMLBeandata)

longlasttime=newFile(data.xmlFile).lastModified();

if(data.lastModified!

=lasttime)

Documentdoc=XMLUtil.readXMLFile(data.xmlFile);

Elementreal_dataNode=doc.getDocumentElement();

XMLBeanUtil.injectNodeToXMLBean(data,real_dataNode);

}catch(Exceptione){

e.printStackTrace();

XMLBean:

+data.getClass()+"

["

+data+"

]已经更新..."

data.lastModified=lasttime;

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2