zoukankan      html  css  js  c++  java
  • JAVA对XML的添、删、改、查操作

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;

    import org.w3c.dom.*;
    import org.xml.sax.SAXException;

    import javax.xml.parsers.*;
    import javax.xml.transform.*;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.*;
    import javax.xml.xpath.*;

    public class testXmlRoles {
     
     public static void main(String[] args) {
      if(args.length>0){   
       String method = args[0];
       DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
       //根节点
       Element root = null;
       //子节点
       Element theRole = null;
       //子节点元素
       Element theElem = null;
       try {
        factory.setIgnoringElementContentWhitespace(true);
        DocumentBuilder db = factory.newDocumentBuilder();
        Document xmldoc = db.parse(new File("Test.xml"));
        root = xmldoc.getDocumentElement();
                 //--- 新建一角色(子节点) ----
           //调用格式 :java TestXmlRoles add newrole 12 123456
        if(method.equals("add")){
          if(args.length!=4){
           System.out.println("请输入四个参数:格式例如-->java TestXmlRoles add newrole 12 123456"); 
          }else{
           theRole = (Element) selectSingleNode("/roles/role[name='" + args[1] + "' and id='"+args[2]+"']", root);
           if(theRole!=null){
            System.out.println("---该name或者id已经存在,请另设----");
           }else{
            theRole = xmldoc.createElement("role"); 
            //附加子节点元素   
            theElem = xmldoc.createElement("name");
            theElem.setTextContent(args[1]);   
            theRole.appendChild(theElem);
            
            theElem = xmldoc.createElement("id");
            theElem.setTextContent(args[2]);
            theRole.appendChild(theElem);
            
            theElem = xmldoc.createElement("pas");
            theElem.setTextContent(args[3]);
            theRole.appendChild(theElem);
            //根节点附加子节点
            root.appendChild(theRole);   
            output(xmldoc);
            saveXml("Test.xml", xmldoc);
            System.out.println("---添加成功----");
           }       
          }      
         }
         
       //--- 要用id属性删除角色 ----
       //调用格式 :java TestXmlRoles delbyid 12
         else if (method.equals("delbyid")) {
         if (args.length != 2) {
          System.out.println("请输入id:格式例如-->java TestXmlRoles delbyid 12");
         } else {
          theRole = (Element) selectSingleNode("/roles/role[id='"+ args[1] + "']", root);
          if (theRole != null) {
           theRole.getParentNode().removeChild(theRole);
           saveXml("Test.xml", xmldoc);
           System.out.println("---删除成功----");
          } else {
           System.out.println("--不存在该id的角色 ----");
          }

         }
        }
         
               //--- 要用name属性删除角色 ----
         //调用格式 :java TestXmlRoles delbyname newrole
          else if (method.equals("delbyname")) {
         if (args.length != 2) {
          System.out.println("请输入name参数:格式例如-->java TestXmlRoles delbyname newrole");
         } else {
          theRole = (Element) selectSingleNode("/roles/role[name='" + args[1] + "']", root);
          if (theRole != null) {
           theRole.getParentNode().removeChild(theRole);
           saveXml("Test.xml", xmldoc);
           System.out.println("---删除成功----");
          } else {
           System.out.println("---不存在名称对应的角色----");
          }
         }
        }
         
         //根据name查找id,pas
         //调用格式 java TestXmlRoles findbyname newrole
         else if (method.equals("findbyname")) {
         if (args.length != 2) {
          System.out.println("请输入name参数:格式例如-->java TestXmlRoles findbyname newrole");
         } else {
          theRole = (Element) selectSingleNode("/roles/role[name='" + args[1] + "']", root);
          if (theRole != null) {
           // getElementsByTagName返回的是NodeList,所以要跟上item(0)
           String password = theRole.getElementsByTagName("pas").item(0).getTextContent();
           String id = theRole.getElementsByTagName("id").item(0).getTextContent();
           System.out.println("---  对应角色id 和密码:----" + id+ "," + password);
          } else {
           System.out.println("---不存在该名称的角色---");
          }
         }
        }
         
                     // 根据id查找name,pas
        // 调用格式 java TestXmlRoles findbyid 30
        else if (method.equals("findbyid")) {
         if (args.length != 2) {
          System.out.println("请输入id参数:格式例如-->java TestXmlRoles findbyid 30");
         } else {
          theRole = (Element) selectSingleNode("/roles/role[id='"+ args[1] + "']", root);
          if(theRole!=null){
                                //getElementsByTagName返回的是NodeList,所以要跟上item(0)
           String password = theRole.getElementsByTagName("pas").item(0).getTextContent();
           String name = theRole.getElementsByTagName("name").item(0).getTextContent();
           System.out.println("---  对应角色id 和密码:----" + name + ","+ password);
          }else{
           System.out.println("---没有找到相关记录---");
          }      
         }
        }
         
         // --- 根据name对role做一些修改。 ----
         //调用格式 java TestXmlRoles editbyname cs 8888888
        else if(method.equals("editbyname")){
           if(args.length!=2){
          System.out.println("请输入name参数:格式例如-->java TestXmlRoles editbyname cs 8888888"); 
           }else{
          theRole = (Element) selectSingleNode("/roles/role[name='"+args[1]+"']",root);
                            if(theRole!=null){
                                //--- 修改角色密码 -----
                             //getElementsByTagName返回的是NodeList,所以要跟上item(0)
              theRole.getElementsByTagName("pas").item(0).setTextContent(args[2]);
              /*// --- 给节点加一个属性'id',值为B01 ----
              theRole.setAttribute("id", "B01");
              output(theRole);*/
              saveXml("Test.xml", xmldoc);
          }else{
           System.out.println("---没有找到相关记录---");
          }      
          }
            }
         
         //批量删除
         //调用格式 java TestXmlRoles delbanch id<10
        else if(method.equals("delbanch")){
          if(args.length!=2){
          System.out.println("请输入删除条件:格式例如-->java TestXmlRoles delbanch id<10"); 
          }else{
                         //NodeList someRoles = selectNodes("/roles/role[id<10]", root);
          NodeList someRoles = selectNodes("/roles/role["+args[2]+"]", root);
          System.out.println("---  符合条件的角色有 " + someRoles.getLength()+ "个 ---");
          for (int i = 0; i < someRoles.getLength(); i++) {
           someRoles.item(i).getParentNode().removeChild(someRoles.item(i));
          }
          saveXml("Test.xml", xmldoc);
          }
          }else{
                     System.out.println("--- 请输入正确的方法名称---");
          }
       } catch (ParserConfigurationException e) {
        e.printStackTrace();
       } catch (SAXException e) {
        e.printStackTrace();
       } catch (IOException e) {
        e.printStackTrace();
       }
      } else {
       System.out.println("调用该程序需要输入相关参数:格式例如-->java TestXmlRoles add newrole 12 123456");
      }  
     }

    //  将node的XML字符串输出到控制台
     public static void output(Node node) {
      TransformerFactory transFactory = TransformerFactory.newInstance();
      try {
       Transformer transformer = transFactory.newTransformer();
       transformer.setOutputProperty("encoding", "gb2312");
       transformer.setOutputProperty("indent", "yes");

       DOMSource source = new DOMSource();
       source.setNode(node);
       StreamResult result = new StreamResult();
       result.setOutputStream(System.out);

       transformer.transform(source, result);
      } catch (TransformerConfigurationException e) {
       e.printStackTrace();
      } catch (TransformerException e) {
       e.printStackTrace();
      }
     }

    //  查找节点,并返回第一个符合条件节点
     public static Node selectSingleNode(String express, Object source) {
      Node result = null;
      XPathFactory xpathFactory = XPathFactory.newInstance();
      XPath xpath = xpathFactory.newXPath();
      try {
       result = (Node) xpath.evaluate(express, source, XPathConstants.NODE);
      } catch (XPathExpressionException e) {
       e.printStackTrace();
      }

      return result;
     }

    //  查找节点,返回符合条件的节点集。
     public static NodeList selectNodes(String express, Object source) {
      NodeList result = null;
      XPathFactory xpathFactory = XPathFactory.newInstance();
      XPath xpath = xpathFactory.newXPath();
      try {
       result = (NodeList) xpath.evaluate(express, source,XPathConstants.NODESET);
      } catch (XPathExpressionException e) {
       e.printStackTrace();
      }

      return result;
     }

    //  将Document输出到文件
     public static void saveXml(String fileName, Document doc) {
      TransformerFactory transFactory = TransformerFactory.newInstance();
      try {
       Transformer transformer = transFactory.newTransformer();
       transformer.setOutputProperty("indent", "yes");

       DOMSource source = new DOMSource();
       source.setNode(doc);
       StreamResult result = new StreamResult();
       result.setOutputStream(new FileOutputStream(fileName));

       transformer.transform(source, result);
      } catch (TransformerConfigurationException e) {
       e.printStackTrace();
      } catch (TransformerException e) {
       e.printStackTrace();
      } catch (FileNotFoundException e) {
       e.printStackTrace();
      }
     }
    }

    XML文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <roles>
     <role>
      <name>张三</name>
      <id>10</id>
      <pas>789456</pas>
     </role>
     <role>
      <name>李四</name>
      <id>20</id>
      <pas>654321</pas>
     </role>
      
       
    <role id="B01">
    <name>cs</name>
    <id>30</id>
    <pas>8888888</pas>
    </role>


    </roles>

  • 相关阅读:
    BEM(Block–Element-Modifier)
    http://element.eleme.io/#/zh-CN/component/quickstart
    Commit message 的写法规范。本文介绍Angular 规范(
    好的commit应该长啥样 https://github.com/torvalds/linux/pull/17#issuecomment-5654674
    代码管理
    if you have content fetched asynchronously on pages where SEO is important, SSR might be necessary
    Martin Fowler’s Active Record design pattern.
    The Zen of Python
    Introspection in Python How to spy on your Python objects Guide to Python introspection
    Object-Oriented Metrics: LCOM 内聚性的度量
  • 原文地址:https://www.cnblogs.com/willpower/p/1204099.html
Copyright © 2011-2022 走看看