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>
分享到:
相关推荐
无论是简单的增删改查还是复杂的业务逻辑,iBatis都能够胜任。同时,其动态SQL功能使得在处理复杂查询时更加得心应手。在实际项目开发中,结合Spring等框架,iBatis能帮助我们构建高效、稳定的数据库访问层。
EasyUI DataGrid 是一款基于jQuery的前端数据展示组件,它为Web应用提供了强大的表格操作功能,包括数据的增删改查。在这个主题中,我们将深入探讨EasyUI DataGrid的源码,理解其工作原理,以及如何在实际项目中实现...
在本项目中,EasyUI用于构建用户交互界面,提供CRUD操作的UI元素,如表格展示数据,按钮执行增删改查操作。 5. **Oracle 数据库**:Oracle是一种流行的商业关系型数据库管理系统,适合大型企业级应用。在这个项目中...
这个"struts+hibernate+spring添删改查源码示例"是针对这三大框架集成使用的一个实践教程,帮助开发者理解和学习如何在实际项目中进行数据的增删改查操作。 1. **Struts**:Struts 是一个基于MVC(Model-View-...
它提供了Session接口进行数据的增删改查操作,并且支持事务管理和缓存机制,提高了开发效率和应用性能。 **SQL Server 2005** SQL Server 2005是微软公司推出的关系型数据库管理系统,具有强大的数据处理能力、高...
在这个JSP课程设计中,学生将学习如何使用数据库进行基本操作,如添、删、改、查,以及应用MVC(Model-View-Controller)编程模式。以下是对这一课程设计的详细解析: 一、实验目的和要求 实验的主要目的是让学生...
* 使用 Hibernate 实现持久化层,使用泛型 DAO 封装添/删/改/查/分页/统计这些操作 * 实现细粒度权限管理使用 Struts2 中提供的拦截器实现对 Action 方法的拦截 * 粗粒度权限管理使用 Filter 实现 * 使用 Java、...
这个压缩包提供的是SSH框架下实现基础的增删改查操作以及Excel文件下载功能的示例代码。在Java Web应用中,SSH框架起到了架构组织、视图展示和持久化数据的重要作用。 Spring框架作为核心容器,负责管理对象的生命...
Hibernate提供了丰富的API,包括Session、Query等,用于数据的增删改查。 **Spring** 框架则是一个全面的企业级应用开发框架,它提供依赖注入(DI)和面向切面编程(AOP)等功能,增强了代码的可测试性和可维护性。...
在IT行业中,Spring Data Elasticsearch是一个非常重要的框架,它允许开发者轻松地与Elasticsearch数据库进行交互,实现数据的增删改查操作。本项目是一个基于Maven构建的示例,旨在帮助我们理解如何在实际应用中...
在实现添删改查功能时,SQL语句(如SELECT, INSERT, UPDATE, DELETE)将被用于操作这些数据。 为了实现前后端的交互,Struts2使用了配置文件struts.xml,其中定义了Action的映射路径、结果类型和其他相关配置。比如...
本示例将详细阐述如何利用这三个框架实现数据表的增删改查功能。 首先,Spring作为一个轻量级的容器,主要负责依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)。在本示例...
1. **SQL映射**:iBATIS 提供了XML配置文件来定义SQL语句,包括增删改查等操作。这种方式使得SQL与业务逻辑解耦,使得SQL更易于管理和优化,同时也方便了数据库迁移。 2. **动态SQL**:iBATIS 的一大特色是支持动态...
项目中包含了一张简单表的增删改查功能,这通常是Web应用的基本需求。 1. **EasyUI的使用**: - 页面布局:EasyUI提供了各种布局组件,如`<div>`、`<table>`等,用于创建响应式的页面结构。 - 数据展示:通过`...