高效读取与修改XML文件

来源:互联网 发布:java 限制登录次数 编辑:程序博客网 时间:2024/05/19 15:25

XML范例文件(NewFile.xml):

 <?xml version="1.0" encoding="UTF-8"?>
<root>
<toPhoneNumber>09876543219</toPhoneNumber>
<managerNumber>09876543219</managerNumber>
<smsStatus>false</smsStatus>
<telStatus>false</telStatus>
<connUrl>10.6.7.123:4321</connUrl>
</root>

主工具类:

import java.io.File;
import java.util.HashMap;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;


public class XmlHandlerUtil{

   //根据文件路径加载为Document对象
   public static Document loadDocument(String filename){
  Document document = null;
     try{ 
           DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();   
           DocumentBuilder builder=factory.newDocumentBuilder();   
           document=builder.parse(new File(filename));   
           document.normalize();
     }catch (Exception e){
           e.printStackTrace();
     }  
       return document;
    }
  
   //修改xml内容
   public static void updateXmlMethod(String filename,HashMap paramMap){
  
   if(paramMap != null){
       Document document = loadDocument(filename);
       //获得xml根节点
       Node root = document.getDocumentElement();
       if(root.hasChildNodes()){
           NodeList chlidrenNodes = root.getChildNodes();
           String setValue = null;
           //遍历根下所有节点
           for (int i=0;i<chlidrenNodes.getLength();i++){                      
                Node subnode = chlidrenNodes.item(i);
                if (subnode.getNodeName()=="toPhoneNumber"){
                 setValue = (String)paramMap.get("toPhoneNumber");
                }else if(subnode.getNodeName()=="managerNumber"){
                 setValue = (String)paramMap.get("managerNumber");
                }else if(subnode.getNodeName()=="smsStatus"){
                 setValue = (String)paramMap.get("smsStatus");
                }else if(subnode.getNodeName()=="telStatus"){
                 setValue = (String)paramMap.get("telStatus");
                }else if(subnode.getNodeName()=="connUrl"){
                 setValue = (String)paramMap.get("connUrl");
                }
                if(setValue != null && !"".equals(setValue)){
                 subnode.getFirstChild().setNodeValue(setValue);
                }
                setValue = null;
           }
       }
       doc2XmlFile(document,filename);
   }
   }
   // 生成新的xml文件
   public static boolean doc2XmlFile(Document document,String filename){
       boolean flag = true;
       try{
           TransformerFactory tFactory = TransformerFactory.newInstance();   
           Transformer transformer = tFactory.newTransformer(); 
           DOMSource source = new DOMSource(document); 
           StreamResult result = new StreamResult(new File(filename));   
           transformer.transform(source, result); 
      }catch(Exception e){
         flag = false;
         e.printStackTrace();
       }
       return flag;
   }
  
   // 读取xml内容
   public static void readXmlFile(String filename){
   
    try{
        ContentHandler handler = new ContentHandler();
        SAXParserFactory saxparserfactory = SAXParserFactory.newInstance();
        SAXParser saxparser = saxparserfactory.newSAXParser();
        saxparser.parse(new File(filename), handler);
    }catch(Exception ex){
        ex.printStackTrace();
    }
 
   }
}

SAX解析类:

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

//事件xml解析类
public class ContentHandler extends DefaultHandler {

 private String preElement = null;
 @Override
 public void characters(char[] ch, int start, int length) throws SAXException {

  if("toPhoneNumber".equals(preElement)){
   
   System.out.println(new String(ch,start,length));
  }else if("managerNumber".equals(preElement)){
   
   System.out.println(new String(ch,start,length));
  }else if("smsStatus".equals(preElement)){
   
   System.out.println(new String(ch,start,length));
  }else if("telStatus".equals(preElement)){
   
   System.out.println(new String(ch,start,length));
  }else if("connUrl".equals(preElement)){
   
   System.out.println(new String(ch,start,length));
  }
 }
 
 @Override
 public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {

  preElement = qName;
 }
 
 @Override
 public void endElement(String uri, String localName, String qName) throws SAXException {

  preElement = null;
 }
 
}

实用类:

import java.util.HashMap;


public class SAXUtil {
 
 public static void main(String[] args) {
 
  //修改
  HashMap paramMap = new HashMap();
  paramMap.put("toPhoneNumber", "09876543219");
  paramMap.put("managerNumber", "09876543219");
  paramMap.put("smsStatus", "false");
  paramMap.put("telStatus", "false");
  paramMap.put("connUrl", "10.6.7.123:4321");
  XmlHandlerUtil.updateXmlMethod("NewFile.xml",paramMap);
  
  //读取
  XmlHandlerUtil.readXmlFile("NewFile.xml");
 }
}


 

 

原创粉丝点击