| |
//很多时候,为了避免多次访问/查询数据库重的数据或者便于察看,将需要的数据一次取出并写入xml文件
//通过查询条件m_condition 按照xmlmappath的模式/模板 将从库中的数据写到resultxml //并返回记录条数
public int writexml(string m_condtion,string xmlmappath,string resultxml){ int recordnum=0; string tablename = "table"; string tablecol = "*"; string sql = "select " + tablecol + " from " + tablename + " where " + m_condtion;
document mapdoc = null; document datadoc = null; document newdoc = null; //开始准备工作 try { documentbuilderfactory dbfactory = documentbuilderfactory.newinstance(); //create the documentbuilder documentbuilder docbuilder = dbfactory.newdocumentbuilder(); //parse the file to create the document mapdoc = docbuilder.parse(xmlmappath);
datadoc = docbuilder.newdocument(); //instantiate the new document newdoc = docbuilder.newdocument(); } catch (exception e) { system.out.println(e.getmassege()); }
//开始读取映射作用的template文件
element maproot = mapdoc.getdocumentelement(); node datanode = maproot.getelementsbytagname("data").item(0); element dataelement = (element)datanode;
//create a new element called "data" element dataroot = datadoc.createelement("data");
try { /******** 这里创建一个连接conn,并创建statement 根据不同的数据源创建 ********************************/ resultset resultset = stmt.query(sql); //get the resultset information resultsetmetadata resultmetadata = resultset.getmetadata(); int numcols = resultmetadata.getcolumncount(); log.write("db_to_xml:numcols:" + numcols);
while (resultset.next()) { //create a new element called "row" element rowel = datadoc.createelement("row");
//为了便于浏览和读,创建列数,以id为标记 string colname = "id"; string colval =integer.tostring(++recordnum); element datael = datadoc.createelement(colname); datael.appendchild(datadoc.createtextnode(colval));
rowel.appendchild(datael); for (int i=1; i <= numcols; i++) {
colname = resultmetadata.getcolumnname(i); //get the column value colval = resultset.getstring(i);
//determine if the last column accessed was null if (resultset.wasnull()) { colval = ""; }
datael = datadoc.createelement(colname);
datael.appendchild(datadoc.createtextnode(colval));
rowel.appendchild(datael); } //add the row to the root element dataroot.appendchild(rowel); } } catch (exception e) { log.write(e.getmessage()); } finally { log.write(" db_to_xml: closing connections...");
}
//add the root element to the document datadoc.appendchild(dataroot);
node node1= maproot.getelementsbytagname("root").item(0); element newrootinfo =(element)node1; log.write("after got newrootinfo ..."); //retrieve the root and row information
string newrootname = newrootinfo.getattribute("name");
string newrowname= newrootinfo.getattribute("rowname");
nodelist newnodesmap = maproot.getelementsbytagname("element");
//create the final root element with the name from the mapping file element newrootelement=null;
newrootelement = newdoc.createelement(newrootname);
nodelist oldrows = dataroot.getelementsbytagname("row"); for (int i=0; i < oldrows.getlength(); i++){
//retrieve each row in turn element thisrow = (element)oldrows.item(i);
//create the new row element newrow = newdoc.createelement(newrowname);
for (int j=0; j < newnodesmap.getlength(); j++) {
//for each node in the new mapping, retrieve the information //first the new information... element thiselement = (element)newnodesmap.item(j); string newelementname = thiselement.getattribute("name");
//then the old information element oldelement = (element)thiselement.getelementsbytagname("content").item(0); string oldfield = oldelement.getfirstchild().getnodevalue();
//get the original values based on the mapping information element oldvalueelement = (element)thisrow.getelementsbytagname(oldfield).item(0); string oldvalue = oldvalueelement.getfirstchild().getnodevalue();
element newelement = newdoc.createelement(newelementname); newelement.appendchild(newdoc.createtextnode(oldvalue));
nodelist newattributes = thiselement.getelementsbytagname("attribute"); for (int k=0; k < newattributes.getlength(); k++) { //get the mapping information element thisattribute = (element)newattributes.item(k); string oldattributefield = thisattribute.getfirstchild().getnodevalue(); string newattributename = thisattribute.getattribute("name");
oldvalueelement = (element)thisrow.getelementsbytagname(oldattributefield).item(0); string oldattributevalue = oldvalueelement.getfirstchild().getnodevalue();
newelement.setattribute(newattributename, oldattributevalue); }
//add the new element to the new row newrow.appendchild(newelement); } //add the new row to the root newrootelement.appendchild(newrow); } //add the new root to the document newdoc.appendchild(newrootelement);
//把生成的xml文档(newdoc)写到文件中(路径名为resultxml) try{ transformerfactory tfactory = transformerfactory.newinstance(); transformer transformer = tfactory.newtransformer(); properties properties = transformer.getoutputproperties(); properties.setproperty(outputkeys.encoding, "gb2312");//iso8859_1,gb2312,utf-8 properties.setproperty(outputkeys.method, "xml"); properties.setproperty(outputkeys.version, "1.0"); properties.setproperty(outputkeys.indent, "yes"); transformer.setoutputproperties(properties);
domsource source = new domsource(newdoc);
streamresult result = new streamresult(new java.io.file(resultxml));
transformer.transform(source, result); //生成xml文件 完成 } catch (exception e) { system.out.println("xml file write:"+e.getmessage()); } return recordnum; }
|
|