XmlCreater.java
?用于創建XML文件
/********************************************************************
?* 項目名稱????:rochoc???<p>
?* 包名稱? ????:rochoc.xml.oper?<p>
?* 文件名稱????:XmlCreater???<p>
?* 編寫者 ????:luoc????<p>
?* 編寫日期????:2005-6-22????<p>
?* 程序功能(類)描述?:?創建DOM并生成XML文件????? <p>
?*
?* 程序變更日期???:
?* 變更作者????:
?* 變更說明????:
********************************************************************/
package rochoc.xml.oper;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.apache.log4j.Logger;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
/**
?* 類名:XmlCreater? <p>
?* 類描述: 創建DOM并生成XML文件<p>
?* 編寫者 :luoc<p>
?* 編寫日期 :2005-6-22<p>
?* 主要public成員變量:<p>
?* 主要public方法:?? <p>
?**/
public class XmlCreater
{
??? /**
???? *構造函數說明:?????? <p>
???? *參數說明:@param path? xml文件路徑 <p>
??? **/
??? public XmlCreater(String path)
??? {
??????? this.path=path;
??????? init();
??? }
???
??? /**
??? * 方法名稱:init<p>
??? * 方法功能: 初始化函數?????????? <p>
??? * 參數說明: <p>
??? * 返回:void <p>
??? * 作者:luoc
??? * 日期:2005-6-22
??? **/
??? private void init()
??? {
??????? DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
??????? try
??????? {
??????????? DocumentBuilder builder=factory.newDocumentBuilder();
??????????? doc=builder.newDocument();//新建DOM
??????? }catch(ParserConfigurationException e)
??????? {
??????????? logger.error("Parse DOM builder error:"+e);
??????? }
??? }
???
??? /**
??? * 方法名稱:createRootElement<p>
??? * 方法功能:創建根結點,并返回??????????? <p>
??? * 參數說明:@param rootTagName <p>
??? * 返回:Element <p>
??? * 作者:luoc
??? * 日期:2005-6-22
??? **/
??? public Element createRootElement(String rootTagName)
??? {????
??????? if(doc.getDocumentElement()==null)
??????? {
??????????? logger.debug("create root element '"+rootTagName+"' success.");
??????????? Element root=doc.createElement(rootTagName);
??????????? doc.appendChild(root);
??????????? return root;
??????? }
??????? logger.warn("this dom's root element is exist,create fail.");
??????? return doc.getDocumentElement();
??? }
???
??? /**
??? * 方法名稱:createElement<p>
??? * 方法功能:在parent結點下增加子結點tagName<p>
??? * 參數說明:@param parent
??? * 參數說明:@param tagName <p>
??? * 返回:Element <p>
??? * 作者:luoc
??? * 日期:2005-6-22
??? **/
??? public Element createElement(Element parent,String tagName)
??? {
??????? Document doc=parent.getOwnerDocument();
??????? Element child=doc.createElement(tagName);
??????? parent.appendChild(child);???????
??????? return child;
??? }
???
??? /**
??? * 方法名稱:createElement<p>
??? * 方法功能:在parent結點下增加值為value的子結點tabName<p>
??? * 參數說明:@param parent
??? * 參數說明:@param tagName
??? * 參數說明:@param value <p>
??? * 返回:Element <p>
??? * 作者:luoc
??? * 日期:2005-6-22
??? **/
??? public Element createElement(Element parent,String tagName,String value)
??? {
??????? Document doc=parent.getOwnerDocument();
??????? Element child=doc.createElement(tagName);
??????? XmlOper.setElementValue(child,value);
??????? parent.appendChild(child);
??????? return child;
??? }
???
??? /**
??? * 方法名稱:createAttribute<p>
??? * 方法功能:在parent結點下增加屬性 <p>
??? * 參數說明:@param parent
??? * 參數說明:@param attrName 屬性名
??? * 參數說明:@param attrValue 屬性值<p>
??? * 返回:void <p>
??? * 作者:luoc
??? * 日期:2005-6-22
??? **/
??? public void createAttribute(Element parent,String attrName,String attrValue)
??? {
??????? XmlOper.setElementAttr(parent,attrName,attrValue);???????
??? }
???
??? /**
??? * 方法名稱:buildXmlFile<p>
??? * 方法功能:根據DOM生成XML文件<p>
??? * 參數說明: <p>
??? * 返回:void <p>
??? * 作者:luoc
??? * 日期:2005-6-22
??? **/
??? public void buildXmlFile()
??? {
??????? TransformerFactory tfactory=TransformerFactory.newInstance();
??????? try
??????? {
??????????? Transformer transformer=tfactory.newTransformer();
??????????? DOMSource source=new DOMSource(doc);
??????????? logger.debug("New DOMSource success.");
??????????? StreamResult result=new StreamResult(new File(path));
??????????? logger.debug("New StreamResult success.");
??????????? transformer.setOutputProperty("encoding","GBK");
??????????? transformer.transform(source,result);
??????????? logger.debug("Build XML File '"+path+"' success.");
??????? }catch(TransformerConfigurationException e)
??????? {
??????????? logger.error("Create Transformer error:"+e);
??????? }catch(TransformerException e)
??????? {
??????????? logger.error("Transformer XML file error:"+e);
??????? }
??? }
???
??? /**
???? * @return 返回 doc。
???? */
??? public Document getDoc()
??? {
??????? return doc;
??? }
??? /**
???? * @param doc 要設置的 doc。
???? */
??? public void setDoc(Document doc)
??? {
??????? this.doc = doc;
??? }
??? /**
???? * @return 返回 path。
???? */
??? public String getPath()
??? {
??????? return path;
??? }
??? /**
???? * @param path 要設置的 path。
???? */
??? public void setPath(String path)
??? {
??????? this.path = path;
??? }
??? /*全局變量*/
??? private Logger logger = Logger.getLogger(getClass().getName());
??? private Document doc=null;//新創建的DOM
??? private String path=null;//生成的XML文件絕對路徑
}