//很多时候,为了避免多次访问/查询数据库重的数据或者便于察看,将需要的数据一次取出并写入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; }
|