Java 对xml文件的读写操作

转载 2013年12月06日 10:53:52
  1. /** 
  2.  * 描述:数据库初始化基本类 
  3.  *  
  4.  * @作者 王群 
  5.  * @创建日期 2010-04-08 
  6.  * @修改人 xxx 
  7.  * @修改日期 xxx 
  8.  * @检查人 xxx 
  9.  * @检查日期 xxx 
  10.  */  
  11. import java.sql.SQLException;  
  12.   
  13. import com.ibatis.sqlmap.client.SqlMapClient;  
  14. import com.oumasoft.bstmanage.ibatis.SqlMapConfig;  
  15. import com.oumasoft.bstmanage.ibatis.data.JsgnPo;  
  16. import com.oumasoft.bstmanage.ibatis.data.Test;  
  17.   
  18. import java.util.*;  
  19. import org.w3c.dom.*;  
  20. import java.io.*;  
  21. import javax.servlet.http.HttpServletRequest;  
  22. import javax.xml.transform.stream.*;  
  23. import org.w3c.dom.*;  
  24. import javax.xml.transform.*;  
  25. import javax.xml.parsers.*;  
  26. import javax.xml.transform.dom.*;  
  27. import org.apache.log4j.Logger;  
  28. import com.oumasoft.bstmanage.ibatis.dao.ClientDao;  
  29.   
  30. public class InitDBDao{  
  31.  static Logger logger = Logger.getLogger(ClientDao.class.getName());  
  32.  static SqlMapClient sqlMap = null;  
  33.  private static File file = null;//读写文件  
  34.  private static DocumentBuilderFactory factory = null;  
  35.  private static DocumentBuilder builder = null;  
  36.    
  37.  /** 
  38.   * 将修改的内容添加到xml文件中 
  39.   * @param document xml节点 
  40.   * @param filename 文件路径 
  41.   * @return 是否写入成功 
  42.   */  
  43.  public static boolean doc2XmlFile(Document document, String filename) {  
  44.   boolean flag = true;  
  45.   try {  
  46.    /** 将document中的内容写入文件中 */  
  47.    TransformerFactory tFactory = TransformerFactory.newInstance();  
  48.    Transformer transformer = tFactory.newTransformer();  
  49.    /** 编码 */  
  50.    //transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");  
  51.    DOMSource source = new DOMSource(document);  
  52.    //判断路径开头有没有“/”如果有则去掉  
  53.    filename = "C".equals(filename.charAt(0)) ? filename : filename.substring(1);     
  54.    StreamResult result = new StreamResult(new FileOutputStream(filename));  
  55.    transformer.transform(source, result);     
  56.   } catch (Exception ex) {  
  57.    flag = false;  
  58.    ex.printStackTrace();  
  59.   }  
  60.   return flag;  
  61.  }  
  62.   
  63.  /** 
  64.   * 读取xml文件 
  65.   * @param filename 文件路径 
  66.   * @return 文件节点 
  67.   */  
  68.  public static Document load(String filename) {    
  69.   Document document = null;  
  70.   try {  
  71.    factory = DocumentBuilderFactory.newInstance();  
  72.    builder = factory.newDocumentBuilder();  
  73.    //判断路径开头有没有“/”如果有则去掉  
  74.    filename = "C".equals(filename.charAt(0)) ? filename : filename.substring(1);  
  75.    document = builder.parse(new FileInputStream(filename));   
  76.    document.normalize();  
  77.   } catch (Exception ex) {  
  78.    ex.printStackTrace();  
  79.    logger.error("找不到文件!");  
  80.   }  
  81.   return document;  
  82.  }  
  83.    
  84.  /** 
  85.   * 添加新的节点 
  86.   * 根节点下没有节点的话直接添加 
  87.   * 根节点下没有重名的直接添加 
  88.   * 有重名的节点则更新节点属性 
  89.   * @param filePath 文件路径 
  90.   * @param nodeName 添加、更新的节点名 
  91.   * @param attr 属性集合 
  92.   * @return 是否成功 
  93.   */  
  94.  public static boolean xmlAddDemoAttri(String filePath,String nodeName,Map<String, String> attr) {  
  95.   Document document = load(filePath);  
  96.   Node root = document.getDocumentElement();  
  97.   //创建节点元素,并命名  
  98.   Element element =document.createElement(nodeName);  
  99.   //向节点中添加属性  
  100.   for (Object key : attr.keySet().toArray()) {  
  101.    element.setAttribute(key.toString(), attr.get(key));  
  102.   }  
  103.   //找到根节点  
  104.   NodeList nodeList = document.getElementsByTagName("Context");  
  105.   //先判断根节点下有没有子节点,没有的话直接添加  
  106.   Node rootNode = nodeList.item(0);  
  107.   if(!root.hasChildNodes()){  
  108.    nodeList.item(0).appendChild(element);  
  109.   }else{  
  110.    //如果有重复的节点,flag=true;  
  111.    boolean flag = false;  
  112.    NodeList rootChs = rootNode.getChildNodes();   
  113.    //循环根节点下的所有子节点   
  114.    for (int i = 0; i < rootChs.getLength(); i++) {  
  115.     Node node = rootChs.item(i);  
  116.     //如果没有重名,并且是最后一个节点的就添加  
  117.     if(!nodeName.equals(node.getNodeName()) && !flag && (i+1) == rootChs.getLength()){  
  118.      nodeList.item(0).appendChild(element);  
  119.     }else if(nodeName.equals(node.getNodeName())){   
  120.         
  121.      //有重名的就看name属性,name一样就修改属性  
  122.      if(node.hasAttributes()){  
  123.       //如果有属性项,判断name属性值,如果name的值相同,则修改其他属性  
  124.       if(null != node.getAttributes().getNamedItem("name") && attr.get("name").equals(node.getAttributes().getNamedItem("name").getNodeValue())){  
  125.        // 生成一个属性对象  
  126.        Attr chAttr = null;  
  127.        //向节点中添加属性  
  128.        for (Object key : attr.keySet().toArray()) {  
  129.         //不更新name属性  
  130.         if(!"name".equals(key.toString())){  
  131.          chAttr = document.createAttribute(key.toString());  
  132.          chAttr.setValue(attr.get(key));  
  133.         }  
  134.        }  
  135.        node.getAttributes().setNamedItem(chAttr);  
  136.       }else if(null != node.getAttributes().getNamedItem("name") && !attr.get("name").equals(node.getAttributes().getNamedItem("name").getNodeValue()) && !flag && (i+1) == rootChs.getLength()){  
  137.       //如果name的值不相同,且都没有相同的节点,添加新的节点  
  138.        nodeList.item(0).appendChild(element);  
  139.       }  
  140.      }  
  141.     }  
  142.    }  
  143.   }  
  144.   // 将修改的内容添加到xml文件中  
  145.   return doc2XmlFile(document, filePath);  
  146.  }  
  147.    
  148.  /** 
  149.   * 查询xml文件中指定节点的制定属性值,对于重名的节点可以通过conditions属性进行筛选 
  150.   * @param filePath xml文件路径 
  151.   * @param nodeName 节点名 
  152.   * @param conditions 条件属性,只有全部符合才会返回attr指定的属性的值 
  153.   * @param attr 要查询的属性 
  154.   * @return 查询的属性的值 
  155.   */  
  156.  public static String xmlReadDemoAttri(String filePath,String nodeName,Map<String, String> conditions,String attr) {  
  157.   String returnStr = null;  
  158.   Document document = load(filePath);  
  159.   Node root = document.getDocumentElement();  
  160.   //找到根节点  
  161.   NodeList nodeList = document.getElementsByTagName("Context");  
  162.   //先找到context根节点  
  163.   Node rootNode = nodeList.item(0);  
  164.   if(!root.hasChildNodes()){  
  165.    //没有子节点  
  166.   }else{  
  167.    NodeList rootChs = rootNode.getChildNodes();   
  168.    //循环根节点下的所有子节点   
  169.    for (int i = 0; i < rootChs.getLength(); i++) {  
  170.     Node node = rootChs.item(i);  
  171.     //查找Resource连接节点   
  172.     if(nodeName.equals(node.getNodeName())){  
  173.      boolean isOk = false;  
  174.      //对于有重名的节点,将节点的属性与条件比较  
  175.      for (Object key : conditions.keySet().toArray()) {  
  176.       String value = conditions.get(key);  
  177.       String nodeValue = node.getAttributes().getNamedItem(key.toString()).getNodeValue();  
  178.         
  179.       //如果相同的属性,但是值不一样则退出循环  
  180.       if(!value.equals(nodeValue)){  
  181.        isOk = true;  
  182.        break;  
  183.       }  
  184.      }  
  185.      //节点中属性与条件属性一旦出现不一样这中断本次循环  
  186.      if(isOk){  
  187.       continue;  
  188.      }else{  
  189.       if(null != node.getAttributes() && null != node.getAttributes().getNamedItem(attr)){  
  190.        returnStr = node.getAttributes().getNamedItem(attr).getNodeValue();  
  191.       }  
  192.      }  
  193.     }      
  194.    }  
  195.   }  
  196.   return returnStr;  
  197.  }  
  198.   
  199.    
  200.  /** 
  201.   * 对比xml文件中指定节点name属性值与指定值是否相等 
  202.   * @param filePath xml文件路径 
  203.   * @param nodeName 节点名 
  204.   * @param nameValue 制定的name值 
  205.   * @return boolean值,相同返回True 
  206.   */  
  207.  public static boolean xmlReadDemoEqualsByName(String filePath,String nodeName,String nameValue) {  
  208.   boolean returnStr = false;  
  209.   Document document = load(filePath);  
  210.   Node root = document.getDocumentElement();  
  211.   //找到根节点  
  212.   NodeList nodeList = document.getElementsByTagName("Context");  
  213.   //先找到context根节点  
  214.   Node rootNode = nodeList.item(0);  
  215.   if(!root.hasChildNodes()){  
  216.    //没有子节点  
  217.    return false;  
  218.   }else{  
  219.    NodeList rootChs = rootNode.getChildNodes();   
  220.    //循环根节点下的所有子节点   
  221.    for (int i = 0; i < rootChs.getLength(); i++) {  
  222.     Node node = rootChs.item(i);  
  223.     //查找Resource连接节点   
  224.     if((nodeName.toLowerCase()).equals(node.getNodeName().toLowerCase())){  
  225.      if(node.hasAttributes() && null != node.getAttributes().getNamedItem("name")){  
  226.       String attrValue = node.getAttributes().getNamedItem("name").getNodeValue();        
  227.       //如果name属性值相同,将标志设置为true  
  228.       if(nameValue.equals(attrValue)){  
  229.        returnStr = true;  
  230.       }  
  231.      }  
  232.     }      
  233.    }  
  234.   }  
  235.   return returnStr;  
  236.  }  
  237. }  

Java_xml_dom4j对xml文件增删读写操作

本博文为子墨原创,转载请注明出处! http://blog.csdn.net/zimo2013/article/details/8963396 Download dom4j-1.6.1.zip...

c#中对XML文件进行读写操作

  • 2010年05月07日 19:16
  • 45KB
  • 下载

实现动态的XML文件读写操作(依然带干货)

前言        最近由于项目需求,需要读写操作XML文件,并且存储的XML文件格式会随着导入的数据不同而随时改变(当然导入的数据还是有一定约束的),这样我们要预先定义好XML文件的格式就不太现实...

C#中XML文件的读写操作

先上要解析的xml文件:(此项目中名为config.xml,也请不要纠结这些标签的含义,就这么个意思)...
  • ergouge
  • ergouge
  • 2014年08月19日 11:38
  • 794

C#使用DOM进行XML文件的读写操作介绍

XML能够在各个平台的不同应用程序之间进行数据的传输与存储.它是独立于软件和硬件的信息传输工具.因此,它也成了W3C 的推荐标准.现在软硬件的配置文件一般都采用XML文件来存储.XML文件简单易用,在...

C语言对xml文件的读写操作

C语言对xml文件的读写操作 2012-08-21 21:48 1269人阅读 评论(1) 收藏 举报 xml语言c文档pathwindows 读取和设置xml配置文件是最常用...

android 5.0 实现xml文件的解释,读写操作

为实现多用户的功能,不同用户的配置信息保存到对应用户的目录下,故涉及到特定目录下的xml文件解释,读写操作的实现,...

java的XML文件写操作

  • 2013年08月31日 15:44
  • 3KB
  • 下载

JAVA 文件读写操作

  • 2011年03月16日 15:56
  • 1KB
  • 下载

OpenCV:YAML vs XML格式文件的读写操作

参考文章:Opencv YAML和XML格式文件操作详解 YAML格式的文件拓展名包括:.yml 和 .yaml; XML格式的文件拓展名为: .xml; 在OpenCV中,使用FileStorage...
  • sss_369
  • sss_369
  • 2016年10月30日 15:13
  • 137
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java 对xml文件的读写操作
举报原因:
原因补充:

(最多只允许输入30个字)