java操作XML文件 dom 篇

1、XML文件的内容转化为String

 /** 
     * doc2String 
     * 将xml文档内容转为String 
     * @return 字符串 
     * @param document 
     */ 
   public static String doc2String(Document document) 
    { 
      String s = ""; 
      try 
       { 
           TransformerFactory tFactory = TransformerFactory.newInstance();    
           Transformer transformer = tFactory.newTransformer(); 
          /** 使用GB2312编码 */ 
          //transformer.setOutputProperty(OutputKeys.ENCODING, "GB2312"); 
           Source source = new DOMSource( document );             
          /** 直接输出到控制台 */ 
          //Result output = new StreamResult( System.out );          
           StringWriter out = new StringWriter();  
           Result output = new StreamResult( out ); 
           transformer.transform( source, output ); 
           out.flush(); 
           s = out.toString(); 
       }catch(Exception ex) 
       {             
           ex.printStackTrace(); 
       }       
      return s; 
    }

 

 

2、符合XML格式的String 转化为XML Document

/** 
     * string2Document 
     * 将字符串转为Document 
     * @return  
     * @param s xml格式的字符串 
     */ 
   public static Document string2Document(String s) 
    { 
       Document document = null; 
      try 
       { 
           DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
           document = parser.parse( new InputSource(new StringReader(s)) ); 
       }catch(Exception ex) 
       {             
            ex.printStackTrace(); 
       } 
      return document; 
    }

 

 

3、Document对象保存为一个xml文件到本地

/** 
     * doc2XmlFile 
     * 将Document对象保存为一个xml文件到本地 
     * @return true:保存成功   flase:失败 
     * @param filename 保存的文件名 
     * @param document 需要保存的document对象 
     */ 
   public static boolean doc2XmlFile(Document document,String filename) 
    { 
      boolean flag = true; 
      try 
       { 
            /** 将document中的内容写入文件中   */ 
             TransformerFactory tFactory = TransformerFactory.newInstance();    
             Transformer transformer = tFactory.newTransformer();  
            /** 编码 */ 
            //transformer.setOutputProperty(OutputKeys.ENCODING, "GB2312"); 
             DOMSource source = new DOMSource(document);  
             StreamResult result = new StreamResult(new File(filename));    
             transformer.transform(source, result);  
         }catch(Exception ex) 
         { 
             flag = false; 
             ex.printStackTrace(); 
         } 
        return flag;       
    }

 

 

4、xml格式的字符串保存为本地文件,如果字符串格式不符合xml规则,则返回失败

 /** 
     * string2XmlFile 
     * 将xml格式的字符串保存为本地文件,如果字符串格式不符合xml规则,则返回失败 
     * @return true:保存成功   flase:失败 
     * @param filename 保存的文件名 
     * @param str 需要保存的字符串 
     */ 
   public static boolean string2XmlFile(String str,String filename) 
    { 
      boolean flag = true; 
      /* 以下格式生成的文件是以UTF-8为格式 */ 
      try 
       { 
          Document doc = string2Document(str);        
          flag = doc2XmlFile(doc,filename); 
       }catch (Exception ex) 
       { 
          flag = false; 
          ex.printStackTrace(); 
       } 
      /** 以下不通过xml格式验证,象生成普通文件格式的方法生成xml文件 
         OutputStream os = null;        
         try { 
                 os = new FileOutputStream(filename); 
                 os.write(str.getBytes()); 
                 os.flush(); 
         } catch (Exception ex) { 
                 flag = false; 
                 ex.printStackTrace(); 
         }finally 
         {      
               try{  
                 if (os!=null) os.close(); 
               }catch (Exception ex) { 
                 ex.printStackTrace(); 
               }               
         } 
          */ 
      return flag; 
    }

 

 

5、载入一个xml文档

/** 
     * load 
     * 载入一个xml文档 
     * @return 成功返回Document对象,失败返回null 
     * @param uri 文件路径 
     */ 
   public static Document load(String filename) 
    { 
       Document document = null; 
      try  
       {  
            DocumentBuilderFactory   factory = DocumentBuilderFactory.newInstance();    
            DocumentBuilder builder=factory.newDocumentBuilder();    
            document=builder.parse(new File(filename));    
            document.normalize(); 
       } 
      catch (Exception ex){ 
           ex.printStackTrace(); 
       }   
      return document; 
    }

 

 

6、演示String保存为xml文件

 

 /** 
     * xmlWriteDemoByString 
     * 演示String保存为xml文件 
     */ 
   public void xmlWriteDemoByString() 
    { 
      String s = ""; 
      /** xml格式标题 "<?xml version='1.0' encoding='GB2312'?>" 可以不用写*/ 
       s = "<?xml version='1.0' encoding='GB2312'?>" 
          +"<config>\r\n" 
          +"    <ftp name='DongDian'>\r\n" 
          +"      <ftp-host>127.0.0.1</ftp-host>\r\n" 
          +"      <ftp-port>21</ftp-port>\r\n" 
          +"      <ftp-user>cxl</ftp-user>\r\n" 
          +"      <ftp-pwd>longshine</ftp-pwd>\r\n" 
          +"      <!-- ftp最多尝试连接次数 -->\r\n" 
          +"      <ftp-try>50</ftp-try>\r\n" 
          +"      <!-- ftp尝试连接延迟时间 -->\r\n" 
          +"      <ftp-delay>10</ftp-delay>\r\n" 
          +"      <ftp-chn>中文</ftp-chn>\r\n" 
          +"   </ftp>\r\n" 
          +"</config>\r\n"; 
      //将文件生成到classes文件夹所在的目录里    
       string2XmlFile(s,"xmlWriteDemoByString.xml");    
      //将文件生成到classes文件夹里    
       string2XmlFile(s,"classes/xmlWriteDemoByString.xml");   
    }

 

 

7、演示手动创建一个Document,并保存为XML文件

 /** 
     * 演示手动创建一个Document,并保存为XML文件 
     */ 
   public void xmlWriteDemoByDocument() 
    { 
        /** 建立document对象 */ 
        try  
         {  
            DocumentBuilderFactory   factory = DocumentBuilderFactory.newInstance(); 
            DocumentBuilder builder = factory.newDocumentBuilder(); 

            Document document = builder.newDocument(); 
           /** 建立config根节点 */ 
            Element configElement = document.createElement("config"); 
            document.appendChild( configElement ); 
           /** 建立ftp节点 */ 
            Comment cmt = document.createComment("东电ftp配置");         
            configElement.appendChild(cmt);         
        
            Element ftpElement = document.createElement("ftp"); 
            configElement.appendChild(ftpElement); 
            ftpElement.setAttribute("name","DongDian"); 
           /** ftp 属性配置 */ 
            Element element = document.createElement("ftp-host"); 
            element.appendChild(document.createTextNode( "127.0.0.1" )); 
            ftpElement.appendChild(element); 
            
            element = document.createElement("ftp-port"); 
            element.appendChild(document.createTextNode( "21" )); 
            ftpElement.appendChild(element); 
            
            element = document.createElement("ftp-user"); 
            element.appendChild(document.createTextNode( "cxl" )); 
            ftpElement.appendChild(element); 
            
            element = document.createElement("ftp-pwd"); 
            element.appendChild(document.createTextNode( "longshine" )); 
            ftpElement.appendChild(element); 
            
            element = document.createElement("ftp-try"); 
            element.appendChild(document.createTextNode( "50" )); 
            ftpElement.appendChild(element); 
            
            element = document.createElement("ftp-chn"); 
            element.appendChild(document.createTextNode( "中文" )); 
            ftpElement.appendChild(element); 
            
           /** 保存Document */ 
            doc2XmlFile(document,"classes/xmlWriteDemoByDocument.xml"); 
       } 
      catch (Exception ex){ 
           ex.printStackTrace(); 
       }        
    }

 

 

8、演示读取文件的具体某个节点的值

 /** 
     *   演示读取文件的具体某个节点的值  
     */ 
   public static void xmlReadDemo() 
    { 
       Document document = load("classes/xmlWriteDemoByDocument.xml"); 
       Node root=document.getDocumentElement(); 
      /** 如果root有子元素 */ 
      if(root.hasChildNodes()) 
       { 
         /** ftpnodes */ 
          NodeList ftpnodes = root.getChildNodes(); 
         /** 循环取得ftp所有节点 */ 
         for (int i=0;i<ftpnodes.getLength();i++) 
          { 
             NodeList ftplist = ftpnodes.item(i).getChildNodes(); 
            for (int k=0;k<ftplist.getLength();k++) 
             { 
               Node subnode = ftplist.item(k); 
              if (subnode.getNodeType()==Node.ELEMENT_NODE) 
               { 
                /** 打印ftp所有节点属性的值 */ 
                 System.out.println(subnode.getNodeName()+":"+subnode.getFirstChild().getNodeValue()); 
               } 
             } 
          } 
       } 
    }

 

 

9、演示修改文件的具体某个节点的值

 /** 
     *   演示修改文件的具体某个节点的值  
     */ 
   public static void xmlUpdateDemo() 
    { 
       Document document = load("classes/xmlWriteDemoByDocument.xml"); 
       Node root=document.getDocumentElement(); 
      /** 如果root有子元素 */ 
      if(root.hasChildNodes()) 
       { 
         /** ftpnodes */ 
          NodeList ftpnodes = root.getChildNodes(); 
         /** 循环取得ftp所有节点 */ 
         for (int i=0;i<ftpnodes.getLength();i++) 
          {                       
             NodeList ftplist = ftpnodes.item(i).getChildNodes(); 
            for (int k=0;k<ftplist.getLength();k++) 
             { 
               Node subnode = ftplist.item(k); 
              /** 删除ftp-chn节点 */ 
              if (subnode.getNodeType()==Node.ELEMENT_NODE&&subnode.getNodeName()=="ftp-chn") 
               { 
                  ftpnodes.item(i).removeChild(subnode); 
               } 
              /** 修改ftp-host的值为 192.168.0.1 */ 
              if (subnode.getNodeType()==Node.ELEMENT_NODE&&subnode.getNodeName()=="ftp-host") 
               {                  
                  subnode.getFirstChild().setNodeValue("192.168.0.1"); 
               } 
             } 
             
          } 
       } 
      /** 修改完后重新保存 */ 
       doc2XmlFile(document,"classes/xmlWriteDemoByDocument.xml"); 
    }

 

原文地址 http://cache.baidu.com/c?word=%BD%AB%3Bdomsource%3B%D7%AA%BB%AF%3B%CE%AA%3Bstring&url=http%3A//hi%2E 

 

张文海 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值