`

JAVA对XML的添、删、改、查操作

阅读更多

java:

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>

 

分享到:
评论

相关推荐

    java ibatis 添、删、改、查

    无论是简单的增删改查还是复杂的业务逻辑,iBatis都能够胜任。同时,其动态SQL功能使得在处理复杂查询时更加得心应手。在实际项目开发中,结合Spring等框架,iBatis能帮助我们构建高效、稳定的数据库访问层。

    EasyUI DataGrid 增删改查源码

    EasyUI DataGrid 是一款基于jQuery的前端数据展示组件,它为Web应用提供了强大的表格操作功能,包括数据的增删改查。在这个主题中,我们将深入探讨EasyUI DataGrid的源码,理解其工作原理,以及如何在实际项目中实现...

    spring mvc + mybatis + maven + easyui + oracle 数据库实现增删改查.rar

    在本项目中,EasyUI用于构建用户交互界面,提供CRUD操作的UI元素,如表格展示数据,按钮执行增删改查操作。 5. **Oracle 数据库**:Oracle是一种流行的商业关系型数据库管理系统,适合大型企业级应用。在这个项目中...

    struts+hibernate+spring添删改查源码示例

    这个"struts+hibernate+spring添删改查源码示例"是针对这三大框架集成使用的一个实践教程,帮助开发者理解和学习如何在实际项目中进行数据的增删改查操作。 1. **Struts**:Struts 是一个基于MVC(Model-View-...

    Struts+Hibernate添删除改功能+SQL2005

    它提供了Session接口进行数据的增删改查操作,并且支持事务管理和缓存机制,提高了开发效率和应用性能。 **SQL Server 2005** SQL Server 2005是微软公司推出的关系型数据库管理系统,具有强大的数据处理能力、高...

    JSP课程设计(数据库添删改查)毕业论文.doc

    在这个JSP课程设计中,学生将学习如何使用数据库进行基本操作,如添、删、改、查,以及应用MVC(Model-View-Controller)编程模式。以下是对这一课程设计的详细解析: 一、实验目的和要求 实验的主要目的是让学生...

    java开发程序员简历

    * 使用 Hibernate 实现持久化层,使用泛型 DAO 封装添/删/改/查/分页/统计这些操作 * 实现细粒度权限管理使用 Struts2 中提供的拦截器实现对 Action 方法的拦截 * 粗粒度权限管理使用 Filter 实现 * 使用 Java、...

    ssh框架 添删改查及excel下载例子(lib里的包已经清空)

    这个压缩包提供的是SSH框架下实现基础的增删改查操作以及Excel文件下载功能的示例代码。在Java Web应用中,SSH框架起到了架构组织、视图展示和持久化数据的重要作用。 Spring框架作为核心容器,负责管理对象的生命...

    struts+hibernate+spring添删改查示例源码

    Hibernate提供了丰富的API,包括Session、Query等,用于数据的增删改查。 **Spring** 框架则是一个全面的企业级应用开发框架,它提供依赖注入(DI)和面向切面编程(AOP)等功能,增强了代码的可测试性和可维护性。...

    spring-data-elasticsearch基本添删改查,maven项目

    在IT行业中,Spring Data Elasticsearch是一个非常重要的框架,它允许开发者轻松地与Elasticsearch数据库进行交互,实现数据的增删改查操作。本项目是一个基于Maven构建的示例,旨在帮助我们理解如何在实际应用中...

    Struts2宿舍管理,添删改查带完整注释

    在实现添删改查功能时,SQL语句(如SELECT, INSERT, UPDATE, DELETE)将被用于操作这些数据。 为了实现前后端的交互,Struts2使用了配置文件struts.xml,其中定义了Action的映射路径、结果类型和其他相关配置。比如...

    玩玩Spring之struts+hibernate+spring添删改查示例.doc

    本示例将详细阐述如何利用这三个框架实现数据表的增删改查功能。 首先,Spring作为一个轻量级的容器,主要负责依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)。在本示例...

    我的第一杯 iBATIS 热茶

    1. **SQL映射**:iBATIS 提供了XML配置文件来定义SQL语句,包括增删改查等操作。这种方式使得SQL与业务逻辑解耦,使得SQL更易于管理和优化,同时也方便了数据库迁移。 2. **动态SQL**:iBATIS 的一大特色是支持动态...

    easyui 1.5+spring 4.2+mybatis 3.4 Web示例 代码

    项目中包含了一张简单表的增删改查功能,这通常是Web应用的基本需求。 1. **EasyUI的使用**: - 页面布局:EasyUI提供了各种布局组件,如`&lt;div&gt;`、`&lt;table&gt;`等,用于创建响应式的页面结构。 - 数据展示:通过`...

Global site tag (gtag.js) - Google Analytics