XML.Java 对xml文件的读写操作

前端之家收集整理的这篇文章主要介绍了XML.Java 对xml文件的读写操作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

</pre><pre class="java" name="code">/** 
 * 描述:数据库初始化基本类 
 *  
 * @作者 王群 
 * @创建日期 2010-04-08 
 * @修改人 xxx 
 * @修改日期 xxx 
 * @检查人 xxx 
 * @检查日期 xxx 
 */  
import javsqsqlException;  
  
import coibatisqlmacliensqlMapClient;  
import cooumasofbstmanagibatisqlMapConfig;  
import cooumasofbstmanagibatidatJsgnPo;  
import cooumasofbstmanagibatidatTest;  
  
import javuti*;  
import orw3do*;  
import javi*;  
import javaservlehttHttpServletRequest;  
import javaxmtransforstrea*;  
import orw3do*;  
import javaxmtransfor*;  
import javaxmparser*;  
import javaxmtransfordo*;  
import orapachlog4Logger;  
import cooumasofbstmanagibatidaClientDao;  
  
public class InitDBDao{  
 static Logger logger = LoggegetLogger(ClientDaclasgetName());  
 static sqlMapClient sqlMap = null;  
 private static File file = null;//读写文件  
 private static DocumentBuilderFactory factory = null;  
 private static DocumentBuilder builder = null;  
   
 /** 
  * 将修改内容添加到xml文件中 
  * @param document xml节点 
  * @param filename 文件路径 
  * @return 是否写入成功 
  */  
 public static boolean doc2XmlFile(Document document,String filename) {  
  boolean flag = true;  
  try {  
   /** 将document中的内容写入文件中 */  
   TransformerFactory tFactory = TransformerFactornewInstance();  
   Transformer transformer = tFactornewTransformer();  
   /** 编码 */  
   //transformesetOutputProperty(OutputKeyENCODING,"GBK");  
   DOMSource source = new DOMSource(document);  
   //判断路径开头有没有“/”如果有则去掉  
   filename = "Cequals(filenamcharAt(0)) ? filename : filenamsubstring(1);     
   StreamResult result = new StreamResult(new FileOutputStream(filename));  
   transformetransform(source,result);     
  } catch (Exception ex) {  
   flag = false;  
   eprintStackTrace();  
  }  
  return flag;  
 }  
  
 /** 
  * 读取xml文件 
  * @param filename 文件路径 
  * @return 文件节点 
  */  
 public static Document load(String filename) {    
  Document document = null;  
  try {  
   factory = DocumentBuilderFactornewInstance();  
   builder = factornewDocumentBuilder();  
   //判断路径开头有没有“/”如果有则去掉  
   filename = "Cequals(filenamcharAt(0)) ? filename : filenamsubstring(1);  
   document = buildeparse(new FileInputStream(filename));   
   documennormalize();  
  } catch (Exception ex) {  
   eprintStackTrace();  
   loggeerror("找不到文件!");  
  }  
  return document;  
 }  
   
 /** 
  * 添加新的节点 
  * 根节点下没有节点的话直接添加 
  * 根节点下没有重名的直接添加 
  * 有重名的节点则更新节点属性 
  * @param filePath 文件路径 
  * @param nodeName 添加、更新的节点名 
  * @param attr 属性集合 
  * @return 是否成功 
  */  
 public static boolean xmlAddDemoAttri(String filePath,String nodeName,Map<String,String> attr) {  
  Document document = load(filePath);  
  Node root = documengetDocumentElement();  
  //创建节点元素,并命名  
  Element element =documencreateElement(nodeName);  
  //向节点中添加属性  
  for (Object key : attkeySet(toArray()) {  
   elemensetAttribute(ketoString(),attget(key));  
  }  
  //找到根节点  
  NodeList nodeList = documengetElementsByTagName("Context");  
  //先判断根节点下有没有子节点,没有的话直接添加  
  Node rootNode = nodeLisitem(0);  
  if(!roohasChildNodes()){  
   nodeLisitem(0appendChild(element);  
  }else{  
   //如果有重复的节点,flag=true;  
   boolean flag = false;  
   NodeList rootChs = rootNodgetChildNodes();   
   //循环根节点下的所有子节点   
   for (int i = 0; i < rootChgetLength(); i++) {  
    Node node = rootChitem(i);  
    //如果没有重名,并且是最后一个节点的就添加  
    if(!nodeNamequals(nodgetNodeName()) && !flag && (i+1) == rootChgetLength()){  
     nodeLisitem(0appendChild(element);  
    }else if(nodeNamequals(nodgetNodeName())){   
        
     //有重名的就看name属性,name一样就修改属性  
     if(nodhasAttributes()){  
      //如果有属性项,判断name属性值,如果name的值相同,则修改其他属性  
      if(null != nodgetAttributes(getNamedItem("name") && attget("name"equals(nodgetAttributes(getNamedItem("name"getNodeValue())){  
       // 生成一个属性对象  
       Attr chAttr = null;  
       //向节点中添加属性  
       for (Object key : attkeySet(toArray()) {  
        //不更新name属性  
        if(!"nameequals(ketoString())){  
         chAttr = documencreateAttribute(ketoString());  
         chAttsetValue(attget(key));  
        }  
       }  
       nodgetAttributes(setNamedItem(chAttr);  
      }else if(null != nodgetAttributes(getNamedItem("name") && !attget("name"equals(nodgetAttributes(getNamedItem("name"getNodeValue()) && !flag && (i+1) == rootChgetLength()){  
      //如果name的值不相同,且都没有相同的节点,添加新的节点  
       nodeLisitem(0appendChild(element);  
      }  
     }  
    }  
   }  
  }  
  // 将修改内容添加到xml文件中  
  return doc2XmlFile(document,filePath);  
 }  
   
 /** 
  * 查询xml文件中指定节点的制定属性值,对于重名的节点可以通过conditions属性进行筛选 
  * @param filePath xml文件路径 
  * @param nodeName 节点名 
  * @param conditions 条件属性,只有全部符合才会返回attr指定的属性的值 
  * @param attr 要查询属性 
  * @return 查询属性的值 
  */  
 public static String xmlReadDemoAttri(String filePath,String> conditions,String attr) {  
  String returnStr = null;  
  Document document = load(filePath);  
  Node root = documengetDocumentElement();  
  //找到根节点  
  NodeList nodeList = documengetElementsByTagName("Context");  
  //先找到context根节点  
  Node rootNode = nodeLisitem(0);  
  if(!roohasChildNodes()){  
   //没有子节点  
  }else{  
   NodeList rootChs = rootNodgetChildNodes();   
   //循环根节点下的所有子节点   
   for (int i = 0; i < rootChgetLength(); i++) {  
    Node node = rootChitem(i);  
    //查找Resource连接节点   
    if(nodeNamequals(nodgetNodeName())){  
     boolean isOk = false;  
     //对于有重名的节点,将节点的属性与条件比较  
     for (Object key : conditionkeySet(toArray()) {  
      String value = conditionget(key);  
      String nodeValue = nodgetAttributes(getNamedItem(ketoString()getNodeValue();  
        
      //如果相同的属性,但是值不一样则退出循环  
      if(!valuequals(nodeValue)){  
       isOk = true;  
       break;  
      }  
     }  
     //节点中属性与条件属性一旦出现不一样这中断本次循环  
     if(isOk){  
      continue;  
     }else{  
      if(null != nodgetAttributes() && null != nodgetAttributes(getNamedItem(attr)){  
       returnStr = nodgetAttributes(getNamedItem(attrgetNodeValue();  
      }  
     }  
    }      
   }  
  }  
  return returnStr;  
 }  
  
   
 /** 
  * 对比xml文件中指定节点name属性值与指定值是否相等 
  * @param filePath xml文件路径 
  * @param nodeName 节点名 
  * @param nameValue 制定的name值 
  * @return boolean值,相同返回True 
  */  
 public static boolean xmlReadDemoEqualsByName(String filePath,String nameValue) {  
  boolean returnStr = false;  
  Document document = load(filePath);  
  Node root = documengetDocumentElement();  
  //找到根节点  
  NodeList nodeList = documengetElementsByTagName("Context");  
  //先找到context根节点  
  Node rootNode = nodeLisitem(0);  
  if(!roohasChildNodes()){  
   //没有子节点  
   return false;  
  }else{  
   NodeList rootChs = rootNodgetChildNodes();   
   //循环根节点下的所有子节点   
   for (int i = 0; i < rootChgetLength(); i++) {  
    Node node = rootChitem(i);  
    //查找Resource连接节点   
    if((nodeNamtoLowerCase()equals(nodgetNodeName(toLowerCase())){  
     if(nodhasAttributes() && null != nodgetAttributes(getNamedItem("name")){  
      String attrValue = nodgetAttributes(getNamedItem("name"getNodeValue();        
      //如果name属性值相同,将标志设置为true  
      if(nameValuequals(attrValue)){  
       returnStr = true;  
      }  
     }  
    }      
   }  
  }  
  return returnStr;  
 }  
}  

猜你在找的XML相关文章