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");
}