DOM解析xml

importjava.io.File;

importjava.util.ArrayList;

importjava.util.List;

importjavax.xml.parsers.DocumentBuilder;

importjavax.xml.parsers.DocumentBuilderFactory;

importorg.w3c.dom.Attr;

importorg.w3c.dom.Document;

importorg.w3c.dom.Element;

importorg.w3c.dom.NodeList;

publicclassOneZoreFiveCFGParse{

/*************************************************

*一下的List为全局List,用来给外部调用提供数据接口

*

***************************************************/

privateList<String>realClassList=newArrayList<String>();//存放根节点元素名称

privateList<String>classNameList=newArrayList<String>();//存放类信息中name:集合

privateList<String>fieldNameList=newArrayList<String>();//存放类信息中field:集合

privateList<List<String>>elemList=newArrayList<List<String>>();//存放类信息中field:集合

//privatestaticfinalStringFILE_CFG_PATH="C:\\xml\\105.cfg";//要装换的cfg文件路径

privateDocumentdocument=null;

publicOneZoreFiveCFGParse(Stringpath){

createDocument(path);//创建文档对象

parseCFG();//解析xml文件,并且将解析的数据封装在容器中,实现数据初始化

}

//创建文档对象

privatevoidcreateDocument(Stringpath){

try{

DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();

DocumentBuilderbuilder=factory.newDocumentBuilder();

Filefile=newFile(path);

if(!file.exists()){

return;

}

document=builder.parse(file);

}catch(Exceptione){

e.printStackTrace();

}

}

//解析CFG文件,并将数据进行封装

privatevoidparseCFG(){

//获取根节点元素

ElementrootElement=document.getDocumentElement();

//根节点元素名称

StringrootNodeName=rootElement.getNodeName();

rootNodeName=rootNodeName.substring(rootNodeName.indexOf(":")+1);

realClassList.add(rootNodeName);

//获取不同形式的配置信息集合

NodeListconfigurationNodeList=rootElement.getElementsByTagName("configurations");

if(configurationNodeList==null||configurationNodeList.getLength()==0){

return;

}

for(inti=0;i<configurationNodeList.getLength();i++){

//获取类信息

ElementconfigurationElement=(Element)configurationNodeList.item(i);

//获取configurations下的paras集合(存放类信息)

NodeListparaNodeList=configurationElement.getElementsByTagName("paras");

if(paraNodeList==null||paraNodeList.getLength()==0){

return;

}

for(intj=0;j<paraNodeList.getLength();j++){

//每个paras创建一个List

List<String>parasList=newArrayList<String>();

ElementparaElement=(Element)paraNodeList.item(j);//获取一个para(类)信息

AttrparaAttr=paraElement.getAttributeNode("name");//属性

if(paraAttr==null){//为空验证,如果存在空paras就跳过

continue;

}else{

StringclazzName=paraAttr.getValue();//获取类名称

classNameList.add(clazzName);

}

//RUANQIANG获取类中的默认数据,先不管

/*************************************************************************************************/

NodeListelemsNodeList=paraElement.getElementsByTagName("elems");

if(elemsNodeList!=null||elemsNodeList.getLength()>0){//没有默认值

for(inth=0;h<elemsNodeList.getLength();h++){

StringBufferstringBuffer=newStringBuffer();//存放field值,每个

ElementelemElment=(Element)elemsNodeList.item(h);

NodeListfieldsNodeList=elemElment.getElementsByTagName("fields");

//在每一个elems下定义生命一个StringBuffer存放fields的属性和值

for(into=0;o<fieldsNodeList.getLength();o++){

//RUANQIANG可能要判断,如果值为空是否抓取其值

ElementfiedsElement=(Element)fieldsNodeList.item(o);

AttrnameAttr=fiedsElement.getAttributeNode("name");//获取变量名

AttrvalueAttr=fiedsElement.getAttributeNode("value");//获取变量对应的值

//给变量赋值

if(nameAttr!=null&&valueAttr!=null){

stringBuffer.append(nameAttr.getNodeValue()+":="+valueAttr.getNodeValue());

}elseif(nameAttr!=null){

if(valueAttr==null){

stringBuffer.append(nameAttr.getNodeValue()+":="+"");

}

}

stringBuffer.append(";");

}

parasList.add(stringBuffer.toString());

}

}

elemList.add(parasList);

/***********************************************************************************************/

//获取类中所有全局变量(类的属性)

NodeListfieldNamesNodeList=paraElement.getElementsByTagName("fieldNames");

if(fieldNamesNodeList==null||fieldNamesNodeList.getLength()==0){

return;

}

//RUANQIANG很关键定义一个StringBuffer将所有的属性名放进去

StringBufferstringBuffer=newStringBuffer();

for(intk=0;k<fieldNamesNodeList.getLength();k++){

stringBuffer.append(",");

ElementfieldElement=(Element)fieldNamesNodeList.item(k);

AttrfieldAttr=fieldElement.getAttributeNode("name");//属性

StringfieldName=fieldAttr.getValue();//获取类属性

stringBuffer.append(fieldName);

}

fieldNameList.add(stringBuffer.toString());

}

}

}

publicList<String>getRealClassList(){

returnrealClassList;

}

publicvoidsetRealClassList(List<String>realClassList){

this.realClassList=realClassList;

}

publicList<String>getClassNameList(){

returnclassNameList;

}

publicvoidsetClassNameList(List<String>classNameList){

this.classNameList=classNameList;

}

publicList<String>getFieldNameList(){

returnfieldNameList;

}

publicvoidsetFieldNameList(List<String>fieldNameList){

this.fieldNameList=fieldNameList;

}

publicList<List<String>>getElemList(){

returnelemList;

}

publicvoidsetElemList(List<List<String>>elemList){

this.elemList=elemList;

}

}

相关推荐