The NoteBook of EricKong

            BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

           

          import java.io.File;  
          import java.io.FileNotFoundException;  
          import java.io.FileWriter;  
          import java.io.IOException;  
          import java.util.ArrayList;  
          import java.util.Date;  
          import java.util.HashMap;  
          import java.util.List;  
            
          import org.jdom.Attribute;  
          import org.jdom.Document;  
          import org.jdom.Element;  
          import org.jdom.JDOMException;  
          import org.jdom.input.SAXBuilder;  
          import org.jdom.output.Format;  
          import org.jdom.output.XMLOutputter;  
            
          import com.demos.util.HelpClass;  
            
          public class ToolXml {  
              
          /** 
               * 創(chuàng)建只有根節(jié)點(diǎn)的xml文件 
               *  
               * 
          @param rootStr 
               *            根節(jié)點(diǎn)名稱 
               * 
          @param xmlPath 
               *            將xml存放的位置及xml文件名稱,如 
               *            "D:\\TalkTimestamps.xml"(如果存放在根目錄下,只要指定xml的文件名即可 
               *            ,即"TalkTimestamps.xml") 
               
          */
            
              
          public static void CreateXmlDoc(String rootStr, String xmlPath) {  
                  
          // 創(chuàng)建根節(jié)點(diǎn)   
                  Element root = new Element(rootStr);  
                  
          // 根節(jié)點(diǎn)添加到文檔中   
                  Document doc = new Document(root);  
                  
          // 將xml文件輸出   
                  OutputXmlDoc(doc, xmlPath);  
              }
            
            
              
          /** 
               * 將Document寫入到指定目錄下的xml文件中 
               *  
               * 
          @param xmlPath 
               *            將xml存放的位置及xml文件名稱,如 
               *            "D:\\TalkTimestamps.xml"(如果存放在根目錄下,只要指定xml的文件名即可) 
               
          */
            
              
          public static void OutputXmlDoc(Document doc, String xmlPath) {  
                  
          try {  
                      
          // 創(chuàng)建XML文件輸出流   
                      XMLOutputter xmlOutput = new XMLOutputter();  
                      
          // 設(shè)置所創(chuàng)建的XML文檔的格式   
                      Format format = Format.getPrettyFormat();  
                      xmlOutput.setFormat(format);  
                      
          // 創(chuàng)建文件輸出流   
                      FileWriter writer = new FileWriter(xmlPath);  
                      
          // 將生成的XML文檔寫入到"D:\TalkTimestamps.xml"文件中   
                      xmlOutput.output(doc, writer);  
                      writer.close();  
                  }
           catch (FileNotFoundException e) {  
                      e.printStackTrace();  
                  }
           catch (IOException e) {  
                      e.printStackTrace();  
                  }
            
              }
            
            
              
          /** 
               * 得到xml文件 
               *  
               * 
          @param xmlPath 
               *            將xml存放的位置及xml文件名稱,如 
               *            "D:\\TalkTimestamps.xml"(如果存放在根目錄下,只要指定xml的文件名即可) 
               * 
          @return 
               
          */
            
              
          public static Document getXmlDoc(String xmlPath) {  
                  
          // 創(chuàng)建用來(lái)解析XML文檔的SAXBuilder類的builder對(duì)象,并使用該對(duì)象中的build方法處理XML文件   
                  SAXBuilder builder = new SAXBuilder();  
                  Document doc 
          = null;  
                  
          try {  
                      doc 
          = builder.build(new File(xmlPath));  
                  }
           catch (JDOMException e) {  
                      e.printStackTrace();  
                  }
           catch (IOException e) {  
                      e.printStackTrace();  
                  }
            
                  
          return doc;  
              }
            
            
              
          public static boolean isExists(String xmlPath) {  
                  System.out.println(
          "");  
                  File f 
          = new File(xmlPath);  
                  
          return f.exists();  
              }
            
            
              
          /** 
               * 增加結(jié)點(diǎn) 
               *  
               * 
          @param xmlPath 
               *            將xml存放的位置及xml文件名稱,如"D:\\TalkTimestamps.xml"(如果存放在根目錄下, 
               *            只要指定xml的文件名即可) 
               * 
          @param nodeName 
               *            節(jié)點(diǎn)名 
               * 
          @param paramsList 
               *            節(jié)點(diǎn)所含的子節(jié)點(diǎn)(key,value) 
               
          */
            
              
          public static void addXmlElement(String xmlPath, Element elem) {  
                  Document doc 
          = getXmlDoc(xmlPath);  
                  
          // 得到父節(jié)點(diǎn)   
                  Element root = doc.getRootElement();  
                  
          // 給父節(jié)點(diǎn)root添加elem子節(jié)點(diǎn)   
                  root.addContent(elem);  
                  
          // 輸出到xml文件   
                  OutputXmlDoc(doc, xmlPath);  
              }
            
            
              
          /** 
               * 增加結(jié)點(diǎn) 
               *  
               * 
          @param xmlPath 
               *            將xml存放的位置及xml文件名稱,如"D:\\TalkTimestamps.xml"(如果存放在根目錄下, 
               *            只要指定xml的文件名即可) 
               * 
          @param nodeName 
               *            結(jié)點(diǎn)名稱 
               * 
          @param paramsList 
               *            子節(jié)點(diǎn)(key,value) 
               * 
          @param attrsList 
               *            屬性(key,value) 
               
          */
            
              
          public static void addXmlElement(String xmlPath, String nodeName,  
                      ArrayList
          <HashMap<String, String>> paramsList,  
                      ArrayList
          <HashMap<String, String>> attrsList) {  
                  Document doc 
          = getXmlDoc(xmlPath);  
                  
          // 得到父節(jié)點(diǎn)   
                  Element root = doc.getRootElement();  
            
                  Element elem 
          = CreateXmlElement(nodeName, paramsList, attrsList);  
            
                  
          // 給父節(jié)點(diǎn)root添加elem子節(jié)點(diǎn)   
                  root.addContent(elem);  
                  
          // 輸出到xml文件   
                  OutputXmlDoc(doc, xmlPath);  
              }
            
            
              
          /** 
               * 創(chuàng)建新結(jié)點(diǎn) 
               *  
               * 
          @param nodeName 
               *            結(jié)點(diǎn)名稱 
               * 
          @param paramsList 
               *            子節(jié)點(diǎn)信息 
               * 
          @param attrsList 
               *            屬性信息(key,value) 
               * 
          @return 
               
          */
            
              
          public static Element CreateXmlElement(String nodeName,  
                      ArrayList
          <HashMap<String, String>> paramsList,  
                      ArrayList
          <HashMap<String, String>> attrsList) {  
                  Element node 
          = new Element(nodeName);  
                  
          if (paramsList != null)  
                      
          for (HashMap<String, String> param : paramsList) {  
                          
          // 為節(jié)點(diǎn)添加子節(jié)點(diǎn)   
                          node.addContent(new Element(param.get("key")).setText(param  
                                  .get(
          "value")));  
                      }
            
                  
          if (attrsList != null)  
                      
          for (HashMap<String, String> attr : attrsList) {  
                          
          // 聲明節(jié)點(diǎn)屬性 并賦值   
                          Attribute att = new Attribute(attr.get("key"), attr.get(attr  
                                  .get(
          "value")));  
                          
          // 為節(jié)點(diǎn)添加屬性   
                          node.setAttribute(att);  
                      }
            
                  
          return node;  
              }
            
            
              
          /** 
               * 修改結(jié)點(diǎn)內(nèi)容 
               *  
               * 
          @param xmlPath 
               *            將xml存放的位置及xml文件名稱,如"D:\\TalkTimestamps.xml"(如果存放在根目錄下, 
               *            只要指定xml的文件名即可) 
               * 
          @param keys 
               *            修改Element的關(guān)鍵字,keys.get(i).get("key")為與子節(jié)點(diǎn)對(duì)應(yīng)的節(jié)點(diǎn)名,keys.get(i). 
               *            get("value")為與子節(jié)點(diǎn)對(duì)應(yīng)的節(jié)點(diǎn)值 
               * 
          @param changeList 
               *            修改Element的內(nèi)容,changeList.get(i).get("key")為與子節(jié)點(diǎn)對(duì)應(yīng)的節(jié)點(diǎn)名, 
               *            changeList.get(i).get("value")為與子節(jié)點(diǎn)對(duì)應(yīng)的節(jié)點(diǎn)值 
               
          */
            
              
          public static void ModifyXmlElement(String xmlPath,  
                      ArrayList
          <HashMap<String, String>> keys,  
                      ArrayList
          <HashMap<String, String>> changeList) {  
                  Document doc 
          = getXmlDoc(xmlPath);  
                  Element root 
          = doc.getRootElement();  
                  
          // 獲得XML文檔根節(jié)點(diǎn)元素下的全部子節(jié)點(diǎn)元素   
                  List<Element> elements = root.getChildren();  
                  
          for (Element elem : elements) {  
                      
          boolean flag = true;  
                      
          for (HashMap<String, String> key : keys) {  
                          Element keyElement 
          = elem.getChild(key.get("key"));  
                          
          if (!keyElement.getText().equals(key.get("value"))) {  
                              flag 
          = false;  
                              
          break;  
                          }
            
                      }
            
                      
          if (flag) {  
                          
          for (HashMap<String, String> change : changeList) {  
                              elem.getChild(change.get(
          "key")).setText(  
                                      change.get(
          "value"));  
                          }
            
                          
          break;  
                      }
            
                  }
            
                  OutputXmlDoc(doc, xmlPath);  
              }
            
            
              
          /** 
               * 修改結(jié)點(diǎn)內(nèi)容(只修改一項(xiàng)) 
               *  
               * 
          @param xmlPath 
               *            將xml存放的位置及xml文件名稱,如"D:\\TalkTimestamps.xml"(如果存放在根目錄下, 
               *            只要指定xml的文件名即可) 
               * 
          @param key 
               *            存放要更改結(jié)點(diǎn)的key, HashMap<String, String>的key為"key"和"value" 
               * 
          @param change 
               *            存放要更改的內(nèi)容, HashMap<String, String>的key為"key"和"value" 
               
          */
            
              
          public static void ModifyXmlElement(String xmlPath,  
                      ArrayList
          <HashMap<String, String>> keys,  
                      HashMap
          <String, String> change) {  
                  Document doc 
          = getXmlDoc(xmlPath);  
                  Element root 
          = doc.getRootElement();  
                  
          // 獲得XML文檔根節(jié)點(diǎn)元素下的全部子節(jié)點(diǎn)元素   
                  List<Element> elements = root.getChildren();  
                  
          for (Element elem : elements) {  
                      
          boolean flag = true;  
                      
          for (HashMap<String, String> key : keys) {  
                          Element keyElement 
          = elem.getChild(key.get("key"));  
                          
          if (keyElement == null{  
                              flag 
          = false;  
                              
          break;  
                          }
            
            
                          
          if (!keyElement.getText().equals(key.get("value"))) {  
                              flag 
          = false;  
                              
          break;  
                          }
            
                      }
            
            
                      
          if (flag) {  
                          elem.getChild(change.get(
          "key")).setText(change.get("value"));  
                      }
            
                  }
            
            
                  OutputXmlDoc(doc, xmlPath);  
              }
            
            
              
          /** 
               * 刪除結(jié)點(diǎn) 
               *  
               * 
          @param xmlPath 
               *            將xml存放的位置及xml文件名稱,如"D:\\TalkTimestamps.xml"(如果存放在根目錄下, 
               *            只要指定xml的文件名即可) 
               * 
          @param key 
               *            刪除Element的關(guān)鍵字,keys.get(i).get("key")為與子節(jié)點(diǎn)對(duì)應(yīng)的節(jié)點(diǎn)名,keys.get(i). 
               *            get("value")為與子節(jié)點(diǎn)對(duì)應(yīng)的節(jié)點(diǎn)值 
               
          */
            
              
          public static void DeleteXmlElement(String xmlPath,  
                      HashMap
          <String, String> key) {  
                  Document doc 
          = getXmlDoc(xmlPath);  
                  Element root 
          = doc.getRootElement();  
                  List
          <Element> elements = root.getChildren();  
                  ArrayList
          <Element> remove = new ArrayList<Element>();  
                  
          for (int i = 0; i < elements.size(); i++{  
                      Element elem 
          = elements.get(i);  
                      
          // 根據(jù)子節(jié)點(diǎn)名得到節(jié)點(diǎn)的子節(jié)點(diǎn)   
                      Element keyElement = elem.getChild(key.get("key"));  
                      
          if (keyElement.getText().equals(key.get("value"))) {  
                          remove.add(elem);  
                      }
            
                  }
            
                    
                  
          for(int i = 0; i < remove.size(); i++){  
                      
          // 刪除節(jié)點(diǎn)elem   
                      root.removeContent(remove.get(i));  
                  }
            
                    
                  OutputXmlDoc(doc, xmlPath);  
              }
            
            
              
          /** 
               * 得到指定結(jié)點(diǎn)的值 
               *  
               * 
          @param xmlPath 
               *            將xml存放的位置及xml文件名稱,如"D:\\TalkTimestamps.xml"(如果存放在根目錄下, 
               *            只要指定xml的文件名即可) 
               * 
          @param keys 
               *            查找Element的關(guān)鍵字,keys.get(i).get("key")為與子節(jié)點(diǎn)對(duì)應(yīng)的節(jié)點(diǎn)名,keys.get(i). 
               *            get("value")為與子節(jié)點(diǎn)對(duì)應(yīng)的節(jié)點(diǎn)值 
               * 
          @param paramsList 
               *            指定要返回的內(nèi)容的節(jié)點(diǎn)名 
               * 
          @return ArrayList<String>的值為Element的內(nèi)容,其順序?qū)?yīng)于paramsList的key值 
               
          */
            
              
          public static ArrayList<String> getElementContent(String xmlPath,  
                      ArrayList
          <HashMap<String, String>> keys,  
                      ArrayList
          <String> paramsList) {  
                  Document doc 
          = getXmlDoc(xmlPath);  
                  Element root 
          = doc.getRootElement();  
                  List
          <Element> elements = root.getChildren();  
                  ArrayList
          <String> result = new ArrayList<String>();  
                  
          for (Element elem : elements) {  
                      
          boolean flag = true;  
                      
          for (HashMap<String, String> key : keys) {  
                          Element keyElement 
          = elem.getChild(key.get("key"));  
                          
          if (keyElement == null{  
                              flag 
          = false;  
                              
          break;  
                          }
            
            
                          
          if (!keyElement.getText().equals(key.get("value"))) {  
                              flag 
          = false;  
                              
          break;  
                          }
            
                      }
            
            
                      
          if (flag) {  
                          
          for (String param : paramsList) {  
                              result.add(elem.getChildText(param));  
                          }
            
                      }
            
                  }
            
                  
          return result;  
              }
            
            
              
          public static void main(String[] args) {  
                  String xmlPath 
          = "user.xml";  
                  
          //創(chuàng)建只有根節(jié)點(diǎn)的xml文件   
          //      ToolXml.CreateXmlDoc("Users", xmlPath);   
          //         
          //      //添加節(jié)點(diǎn)   
          //      ToolXml.testAddElement(xmlPath, "1111", "2222");   
          //      ToolXml.testAddElement(xmlPath, "1111", "3333");   
          //         
          //      //修改節(jié)點(diǎn)內(nèi)容   
          //      ToolXml.testModifyElement(xmlPath, "1111", "2222");   
            
                  
          //刪除節(jié)點(diǎn)   
                  ToolXml.testDeleteElement(xmlPath, "3333");  
            
                  
          //得到節(jié)點(diǎn)信息   
          //      ToolXml.testGetElement(xmlPath, "22222");   
                    
              }
            
                
              
          /** 
               * 測(cè)試刪除節(jié)點(diǎn) 
               * 
          @param xmlPath 
               * 
          @param userid 
               
          */
            
              
          public static void testDeleteElement(String xmlPath, String userid){  
                  HashMap
          <String, String> key = new HashMap<String, String>();  
                   key.put(
          "key""userid");  
                   key.put(
          "value", userid);  
                   ToolXml.DeleteXmlElement(xmlPath, key);  
              }
            
                
              
          /** 
               * 測(cè)試添加節(jié)點(diǎn) 
               * 
          @param xmlPath 
               * 
          @param otheruserid 
               * 
          @param userid 
               
          */
            
              
          public static void testAddElement(String xmlPath, String otheruserid, String userid){  
                   ArrayList
          <HashMap<String, String>> paramsList = new ArrayList<HashMap<String,String>>();  
                   HashMap
          <String, String> param = new HashMap<String, String>();  
                   param.put(
          "key""otheruserid");  
                   param.put(
          "value", otheruserid);  
                   paramsList.add(param);  
                   param 
          = new HashMap<String, String>();  
                   param.put(
          "key""userid");  
                   param.put(
          "value", userid);  
                   paramsList.add(param);  
                   param 
          = new HashMap<String, String>();  
                   param.put(
          "key""timestamp");  
                   param.put(
          "value"new Date().toString());  
                   paramsList.add(param);  
                   addXmlElement(xmlPath, 
          "User", paramsList, null);  
              }
            
            
              
          /** 
               * 測(cè)試修改節(jié)點(diǎn)信息 
               * 
          @param xmlPath 
               * 
          @param otheruserid 
               * 
          @param userid 
               
          */
            
              
          public static void testModifyElement(String xmlPath, String otheruserid, String userid){  
                   ArrayList
          <HashMap<String, String>> keys = new ArrayList<HashMap<String,String>>();  
                   HashMap
          <String, String> param = new HashMap<String, String>();  
                   param.put(
          "key""otheruserid");  
                   param.put(
          "value", otheruserid);  
                   keys.add(param);  
                   param 
          = new HashMap<String, String>();  
                   param.put(
          "key""userid");  
                   param.put(
          "value", userid);  
                   keys.add(param);  
                     
                   ArrayList
          <HashMap<String, String>> changeList = new ArrayList<HashMap<String,String>>();  
                   HashMap
          <String, String> change = new HashMap<String, String>();  
                   change.put(
          "key""userid");  
                   change.put(
          "value""22222");  
                   changeList.add(change);  
                   change 
          = new HashMap<String, String>();  
                   change.put(
          "key""otheruserid");  
                   change.put(
          "value""222222");  
                   changeList.add(change);  
                   change 
          = new HashMap<String, String>();  
                   change.put(
          "key""timestamp");  
                   change.put(
          "value", HelpClass.Date2StringAccurate(new Date()));  
                   changeList.add(change);  
                     
                   ToolXml.ModifyXmlElement(xmlPath, keys, changeList);  
              }
            
                
              
          /** 
               * 測(cè)試得到節(jié)點(diǎn)信息 
               * 
          @param xmlPath 
               * 
          @param userid 
               
          */
            
              
          public static void testGetElement(String xmlPath, String userid){  
                  ArrayList
          <HashMap<String, String>> keys = new ArrayList<HashMap<String, String>>();  
                  HashMap
          <String, String> map = new HashMap<String, String>();  
                  map.put(
          "key""userid");  
                  map.put(
          "value", userid);  
                  keys.add(map);  
                  ArrayList
          <String> paramsList = new ArrayList<String>();  
                  paramsList.add(
          "userid");  
                  paramsList.add(
          "otheruserid");  
                  paramsList.add(
          "timestamp");  
                  ArrayList
          <String> result = null;  
                  
          if (isExists(xmlPath)) {  
                      result 
          = ToolXml.getElementContent(xmlPath, keys, paramsList);  
                      System.out.println(
          "result: "+result.toString());  
                      
          if(result.size() != 0)  
                          
          for (String s : result)   
                              System.out.println(s);  
                      
          else   
                          System.out.println(
          "getElement returns empty");  
                  }
           else {  
                      System.out.println(
          "xml file is not exists");  
                  }
            
            
                    
              }
            
          }
            

           

          posted on 2012-02-23 15:14 Eric_jiang 閱讀(305) 評(píng)論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 白城市| 浙江省| 阿坝县| 柘荣县| 紫阳县| 诏安县| 南昌市| 丰都县| 大连市| 陆川县| 二连浩特市| 固安县| 泰兴市| 临颍县| 弥渡县| 东乡族自治县| 阳江市| 乐陵市| 阿瓦提县| 永和县| 松阳县| 突泉县| 木里| 三原县| 灵宝市| 馆陶县| 五指山市| 潍坊市| 乃东县| 界首市| 昌宁县| 榆社县| 乌鲁木齐市| 望谟县| 丹东市| 茌平县| 孝昌县| 罗甸县| 九台市| 留坝县| 苏尼特右旗|