qq384012351

转自http://shiningtoday.blog.sohu.com/74039378.html

我们需要引入的包:

import java.io.*; 
import javax.xml.transform.*;    
import javax.xml.transform.dom.DOMSource;    
import javax.xml.transform.stream.StreamResult;        
import javax.xml.parsers.*;    
import org.w3c.dom.*; 
import org.xml.sax.InputSource;

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

 

分类:

技术点:

相关文章: