采用org.w3c.dom進行XML操作(二)
|
XmlOper.java
?用于操作XML文件,包括查找、新增、刪除、修改結點
?/******************************************************************** ?* 項目名稱????:rochoc???<p> ?* 包名稱? ????:rochoc.xml.oper?<p> ?* 文件名稱????:XmlOper???<p> ?* 編寫者 ????:luoc????<p> ?* 編寫日期????:2005-6-22????<p> ?* 程序功能(類)描述?:?對XML進行讀寫操作????? <p> ?* ?* 程序變更日期???: ?* 變更作者????: ?* 變更說明????: ********************************************************************/ package rochoc.xml.oper;
import java.util.ArrayList;
import org.apache.log4j.Logger; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList;
/** ?* 類名:XmlOper? <p> ?* 類描述:對XML文件進行讀寫操作,均為靜態(tài)函數 <p> ?* 編寫者 :luoc<p> ?* 編寫日期 :2005-6-22<p> ?* 主要public成員變量:<p> ?* 主要public方法:?? <p> ?**/
public class XmlOper { ??? /** ???? *構造函數說明:?????? <p> ???? *參數說明:?? <p> ??? **/ ??? private XmlOper() ??? {??????? ??? } ??? ??? /** ??? * 方法名稱:getNodeList<p> ??? * 方法功能:獲取父結點parent的所有子結點<p> ??? * 參數說明:@param parent ??? * 參數說明:@return <p> ??? * 返回:NodeList <p> ??? * 作者:luoc ??? * 日期:2005-6-22 ??? **/ ??? public static NodeList getNodeList(Element parent) ??? { ??????? return parent.getChildNodes(); ??? } ??? ??? /** ??? * 方法名稱:getElementsByName<p> ??? * 方法功能:在父結點中查詢指定名稱的結點集??????????? <p> ??? * 參數說明:@param parent ??? * 參數說明:@param name ??? * 參數說明:@return <p> ??? * 返回:Element[] <p> ??? * 作者:luoc ??? * 日期:2005-6-22 ??? **/ ??? public static Element [] getElementsByName(Element parent,String name) ??? { ??????? ArrayList resList=new ArrayList(); ??????? NodeList nl=getNodeList(parent); ??????? for(int i=0;i<nl.getLength();i++) ??????? { ??????????? Node nd=nl.item(i); ??????????? if(nd.getNodeName().equals(name)) ??????????? { ??????????????? resList.add(nd); ??????????? } ??????? } ??????? Element [] res=new Element [resList.size()]; ??????? for(int i=0;i<resList.size();i++) ??????? { ??????????? res[0]=(Element)resList.get(i); ??????? }??????? ??????? logger.debug(parent.getNodeName()+"'s children of "+name+ ??????????????? "'s num:"+res.length); ??????? return res; ??? } ??? ??? /** ??? * 方法名稱:getElementName<p> ??? * 方法功能:獲取指定Element的名稱??????????? <p> ??? * 參數說明:@param element ??? * 參數說明:@return <p> ??? * 返回:String <p> ??? * 作者:luoc ??? * 日期:2005-6-22 ??? **/ ??? public static String getElementName(Element element) ??? { ??????? return element.getNodeName(); ??? } ??? ??? /** ??? * 方法名稱:getElementValue<p> ??? * 方法功能:獲取指定Element的值<p> ??? * 參數說明:@param element ??? * 參數說明:@return <p> ??? * 返回:String <p> ??? * 作者:luoc ??? * 日期:2005-6-22 ??? **/ ??? public static String getElementValue(Element element) ??? { ??????? NodeList nl=element.getChildNodes(); ??????? for(int i=0;i<nl.getLength();i++) ??????? { ??????????? if(nl.item(i).getNodeType()==Node.TEXT_NODE)//是一個Text Node ??????????? {??????????? ??????????????? logger.debug(element.getNodeName()+" has a Text Node."); ??????????????? return element.getFirstChild().getNodeValue(); ??????????? } ??????? }?? ??????? logger.error(element.getNodeName()+" hasn't a Text Node."); ??????? return null; ??? } ??? ??? /** ??? * 方法名稱:getElementAttr<p> ??? * 方法功能:獲取指定Element的屬性attr的值??????????? <p> ??? * 參數說明:@param element ??? * 參數說明:@param attr ??? * 參數說明:@return <p> ??? * 返回:String <p> ??? * 作者:luoc ??? * 日期:2005-6-22 ??? **/ ??? public static String getElementAttr(Element element,String attr) ??? { ??????? return element.getAttribute(attr); ??? } ??? ??? /** ??? * 方法名稱:setElementValue<p> ??? * 方法功能:設置指定Element的值??????????? <p> ??? * 參數說明:@param element ??? * 參數說明:@param val <p> ??? * 返回:void <p> ??? * 作者:luoc ??? * 日期:2005-6-22 ??? **/ ??? public static void setElementValue(Element element,String val) ??? { ??????? Node node=element.getOwnerDocument().createTextNode(val); ??????? NodeList nl=element.getChildNodes(); ??????? for(int i=0;i<nl.getLength();i++) ??????? { ??????????? Node nd=nl.item(i); ??????????? if(nd.getNodeType()==Node.TEXT_NODE)//是一個Text Node ??????????? {??????????? ????????????????? nd.setNodeValue(val); ????????????????? logger.debug("modify "+element.getNodeName()+"'s node value succe."); ????????????????? return; ??????????? } ??????? }?? ??????? logger.debug("new "+element.getNodeName()+"'s node value succe."); ??????? element.appendChild(node);??????? ??? } ??? ??? /** ??? * 方法名稱:setElementAttr<p> ??? * 方法功能:設置結點Element的屬性<p> ??? * 參數說明:@param element ??? * 參數說明:@param attr ??? * 參數說明:@param attrVal <p> ??? * 返回:void <p> ??? * 作者:luoc ??? * 日期:2005-6-22 ??? **/ ??? public static void setElementAttr(Element element, ??????????? String attr,String attrVal) ??? { ??????? element.setAttribute(attr,attrVal); ??? } ??? ??? ??? /** ??? * 方法名稱:addElement<p> ??? * 方法功能:在parent下增加結點child<p> ??? * 參數說明:@param parent ??? * 參數說明:@param child <p> ??? * 返回:void <p> ??? * 作者:luoc ??? * 日期:2005-6-22 ??? **/ ??? public static void addElement(Element parent,Element child) ??? { ??????? parent.appendChild(child); ??? } ??? ??? /** ??? * 方法名稱:addElement<p> ??? * 方法功能:在parent下增加字符串tagName生成的結點<p> ??? * 參數說明:@param parent ??? * 參數說明:@param tagName <p> ??? * 返回:void <p> ??? * 作者:luoc ??? * 日期:2005-6-22 ??? **/ ??? public static void addElement(Element parent,String tagName) ??? {??????? ??????? Document doc=parent.getOwnerDocument(); ??????? Element child=doc.createElement(tagName); ??????? parent.appendChild(child); ??? } ??? ??? /** ??? * 方法名稱:addElement<p> ??? * 方法功能:在parent下增加tagName的Text結點,且值為text<p> ??? * 參數說明:@param parent ??? * 參數說明:@param tagName ??? * 參數說明:@param text <p> ??? * 返回:void <p> ??? * 作者:luoc ??? * 日期:2005-6-22 ??? **/ ??? public static void addElement(Element parent,String tagName,String text) ??? { ??????? Document doc=parent.getOwnerDocument(); ??????? Element child=doc.createElement(tagName); ??????? setElementValue(child,text); ??????? parent.appendChild(child); ??? } ??? ??? /** ??? * 方法名稱:removeElement<p> ??? * 方法功能:將父結點parent下的名稱為tagName的結點移除<p> ??? * 參數說明:@param parent ??? * 參數說明:@param tagName <p> ??? * 返回:void <p> ??? * 作者:luoc ??? * 日期:2005-6-22 ??? **/ ??? public static void removeElement(Element parent,String tagName) ??? { ??????? logger.debug("remove "+parent.getNodeName()+"'s children by tagName "+tagName+" begin..."); ??????? NodeList nl=parent.getChildNodes(); ??????? for(int i=0;i<nl.getLength();i++) ??????? { ??????????? Node nd=nl.item(i); ??????????? if(nd.getNodeName().equals(tagName)) ??????????? { ??????????????? parent.removeChild(nd); ??????????????? logger.debug("remove child '"+nd+"' success."); ??????????? } ??????? } ??????? logger.debug("remove "+parent.getNodeName()+"'s children by tagName "+tagName+" end."); ??? } ??? ??? ??? /*全局變量*/??? ??? static Logger logger=Logger.getLogger("XmlOper"); }
|