当前位置: 首页 > 编程日记 > 正文

JAVA增删改查XML文件

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

最近总是需要进行xml的相关操作。

不免的要进行xml的读取修改等,于是上网搜索,加上自己的小改动,整合了下xml的常用操作。

读取XML配置文件

首先我们需要通过DocumentBuilderFactory获取xml文件的工厂实例。

DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();dbf.setIgnoringElementContentWhitespace(true);

创建文档对象

1 DocumentBuilder db = dbf.newDocumentBuilder();
2             Document doc = db.parse(xmlPath); // 使用dom解析xml文件

最后遍历列表,进行数据提取

 1 NodeList sonlist = doc.getElementsByTagName("son"); 
 2             for (int i = 0; i < sonlist.getLength(); i++) // 循环处理对象
 3             {
 4                 Element son = (Element)sonlist.item(i);;
 5                 
 6                 for (Node node = son.getFirstChild(); node != null; node = node.getNextSibling()){  
 7                     if (node.getNodeType() == Node.ELEMENT_NODE){  
 8                         String name = node.getNodeName();  
 9                         String value = node.getFirstChild().getNodeValue();  
10                         System.out.println(name+" : "+value);
11                     }  
12                 }  
13             }

全部代码

 1 public static void getFamilyMemebers(){
 2         DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
 3         dbf.setIgnoringElementContentWhitespace(true);
 4         try {
 5             DocumentBuilder db = dbf.newDocumentBuilder();
 6             Document doc = db.parse(xmlPath); // 使用dom解析xml文件
 7 
 8             NodeList sonlist = doc.getElementsByTagName("son"); 
 9             for (int i = 0; i < sonlist.getLength(); i++) // 循环处理对象
10             {
11                 Element son = (Element)sonlist.item(i);;
12                 
13                 for (Node node = son.getFirstChild(); node != null; node = node.getNextSibling()){  
14                     if (node.getNodeType() == Node.ELEMENT_NODE){  
15                         String name = node.getNodeName();  
16                         String value = node.getFirstChild().getNodeValue();  
17                         System.out.println(name+" : "+value);
18                     }  
19                 }  
20             }
21         } catch (Exception e) {
22             e.printStackTrace();
23         }
24     }
View Code

在XML文件中增加节点

差不多同样的步骤,先获取根节点,创建一个新的节点,向其中添加元素信息,最后把这个新节点添加到根节点中

 1 Element root = xmldoc.getDocumentElement();
 2             
 3             //删除指定节点
 4             
 5             Element son =xmldoc.createElement("son");
 6             son.setAttribute("id", "004");
 7             
 8             Element name = xmldoc.createElement("name");
 9             name.setTextContent("小儿子");
10             son.appendChild(name);
11 
12             Element age = xmldoc.createElement("name");
13             age.setTextContent("0");
14             son.appendChild(age);
15             
16             root.appendChild(son);

最后不要忘记保存新增的文件,对源文件进行覆盖。

1 TransformerFactory factory = TransformerFactory.newInstance();
2             Transformer former = factory.newTransformer();
3             former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));

全部代码:

 1     public static void createSon() {
 2         DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
 3         dbf.setIgnoringElementContentWhitespace(false);
 4         
 5         try{
 6         
 7             DocumentBuilder db=dbf.newDocumentBuilder();
 8             Document xmldoc=db.parse(xmlPath);
 9         
10             Element root = xmldoc.getDocumentElement();
11             
12             //删除指定节点
13             
14             Element son =xmldoc.createElement("son");
15             son.setAttribute("id", "004");
16             
17             Element name = xmldoc.createElement("name");
18             name.setTextContent("小儿子");
19             son.appendChild(name);
20 
21             Element age = xmldoc.createElement("name");
22             age.setTextContent("0");
23             son.appendChild(age);
24             
25             root.appendChild(son);
26             //保存
27             TransformerFactory factory = TransformerFactory.newInstance();
28             Transformer former = factory.newTransformer();
29             former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));
30             
31         }catch(Exception e){
32             e.printStackTrace();
33         }
34     }
View Code

在XML中修改节点信息

通过XPath来获取目标节点

 1 public static Node selectSingleNode(String express, Element source) {
 2         Node result=null;
 3         XPathFactory xpathFactory=XPathFactory.newInstance();
 4         XPath xpath=xpathFactory.newXPath();
 5         try {
 6             result=(Node) xpath.evaluate(express, source, XPathConstants.NODE);
 7         } catch (XPathExpressionException e) {
 8             e.printStackTrace();
 9         }
10         
11         return result;
12     }

获取目标节点,进行修改,完成后,保存文件。

1 Element root = xmldoc.getDocumentElement();
2             
3             Element per =(Element) selectSingleNode("/father/son[@id='001']", root);
4             per.getElementsByTagName("age").item(0).setTextContent("27");
5             
6             TransformerFactory factory = TransformerFactory.newInstance();
7             Transformer former = factory.newTransformer();
8             former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));

全部代码:

 1     public static void modifySon(){
 2         DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
 3         dbf.setIgnoringElementContentWhitespace(true);
 4         try{
 5         
 6             DocumentBuilder db=dbf.newDocumentBuilder();
 7             Document xmldoc=db.parse(xmlPath);
 8         
 9             Element root = xmldoc.getDocumentElement();
10             
11             Element per =(Element) selectSingleNode("/father/son[@id='001']", root);
12             per.getElementsByTagName("age").item(0).setTextContent("27");
13             
14             TransformerFactory factory = TransformerFactory.newInstance();
15             Transformer former = factory.newTransformer();
16             former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));
17         }catch(Exception e){
18             e.printStackTrace();
19         }
20     }
View Code

删除XML中的节点

通过XPath获取目标节点, 进行删除,最后保存

1             Element root = xmldoc.getDocumentElement();
2             
3             Element son =(Element) selectSingleNode("/father/son[@id='002']", root);
4             root.removeChild(son);
5 
6             TransformerFactory factory = TransformerFactory.newInstance();
7             Transformer former = factory.newTransformer();
8             former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));

全部代码:

 1     public static void discardSon(){
 2             
 3         DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
 4         dbf.setIgnoringElementContentWhitespace(true);
 5         
 6         try{
 7         
 8             DocumentBuilder db=dbf.newDocumentBuilder();
 9             Document xmldoc=db.parse(xmlPath);
10         
11             Element root = xmldoc.getDocumentElement();
12             
13             Element son =(Element) selectSingleNode("/father/son[@id='002']", root);
14             root.removeChild(son);
15 
16             TransformerFactory factory = TransformerFactory.newInstance();
17             Transformer former = factory.newTransformer();
18             former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));
19             
20         }catch(Exception e){
21             e.printStackTrace();
22         }
23     }

综上,基本XML的操作就如此了。下面是整合所有的代码,可以直接运行的,前提是在src下自己配好Xml文件。

XML

 1 <?xml version="1.0" encoding="UTF-8" standalone="no"?><father>
 2     <son id="001">
 3         <name>老大</name>
 4         <age>27</age>
 5     </son>
 6     <son id="002">
 7         <name>老二</name>
 8         <age>13</age>
 9     </son>
10     <son id="003">
11         <name>老三</name>
12         <age>13</age>
13     </son>
14 </father>

xmlManage.java

  1 package xmlManger;
  2 
  3 import java.io.File;
  4 
  5 import javax.xml.parsers.DocumentBuilder;
  6 import javax.xml.parsers.DocumentBuilderFactory;
  7 import javax.xml.transform.Transformer;
  8 import javax.xml.transform.TransformerFactory;
  9 import javax.xml.transform.dom.DOMSource;
 10 import javax.xml.transform.stream.StreamResult;
 11 import javax.xml.xpath.XPath;
 12 import javax.xml.xpath.XPathConstants;
 13 import javax.xml.xpath.XPathExpressionException;
 14 import javax.xml.xpath.XPathFactory;
 15 
 16 import org.w3c.dom.Document;
 17 import org.w3c.dom.Element;
 18 import org.w3c.dom.Node;
 19 import org.w3c.dom.NodeList;
 20 
 21 
 22 
 23 public class xmlManage {
 24     
 25     private static String xmlPath = "E:\\Eclipse(Plugin)\\workspace\\xmlManger\\src\\family.xml";
 26     
 27     
 28     public static void getFamilyMemebers(){
 29         DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
 30         dbf.setIgnoringElementContentWhitespace(true);
 31         try {
 32             DocumentBuilder db = dbf.newDocumentBuilder();
 33             Document doc = db.parse(xmlPath); // 使用dom解析xml文件
 34 
 35             NodeList sonlist = doc.getElementsByTagName("son"); 
 36             for (int i = 0; i < sonlist.getLength(); i++) // 循环处理对象
 37             {
 38                 Element son = (Element)sonlist.item(i);;
 39                 
 40                 for (Node node = son.getFirstChild(); node != null; node = node.getNextSibling()){  
 41                     if (node.getNodeType() == Node.ELEMENT_NODE){  
 42                         String name = node.getNodeName();  
 43                         String value = node.getFirstChild().getNodeValue();  
 44                         System.out.println(name+" : "+value);
 45                     }  
 46                 }  
 47             }
 48         } catch (Exception e) {
 49             e.printStackTrace();
 50         }
 51     }
 52     
 53     public static void modifySon(){
 54         DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
 55         dbf.setIgnoringElementContentWhitespace(true);
 56         try{
 57         
 58             DocumentBuilder db=dbf.newDocumentBuilder();
 59             Document xmldoc=db.parse(xmlPath);
 60         
 61             Element root = xmldoc.getDocumentElement();
 62             
 63             Element per =(Element) selectSingleNode("/father/son[@id='001']", root);
 64             per.getElementsByTagName("age").item(0).setTextContent("27");
 65             
 66             TransformerFactory factory = TransformerFactory.newInstance();
 67             Transformer former = factory.newTransformer();
 68             former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));
 69         }catch(Exception e){
 70             e.printStackTrace();
 71         }
 72     }
 73     
 74     public static void discardSon(){
 75             
 76         DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
 77         dbf.setIgnoringElementContentWhitespace(true);
 78         
 79         try{
 80         
 81             DocumentBuilder db=dbf.newDocumentBuilder();
 82             Document xmldoc=db.parse(xmlPath);
 83         
 84             Element root = xmldoc.getDocumentElement();
 85             
 86             Element son =(Element) selectSingleNode("/father/son[@id='002']", root);
 87             root.removeChild(son);
 88 
 89             TransformerFactory factory = TransformerFactory.newInstance();
 90             Transformer former = factory.newTransformer();
 91             former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));
 92             
 93         }catch(Exception e){
 94             e.printStackTrace();
 95         }
 96     }
 97     
 98     public static void createSon() {
 99         DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
100         dbf.setIgnoringElementContentWhitespace(false);
101         
102         try{
103         
104             DocumentBuilder db=dbf.newDocumentBuilder();
105             Document xmldoc=db.parse(xmlPath);
106         
107             Element root = xmldoc.getDocumentElement();
108             
109             //删除指定节点
110             
111             Element son =xmldoc.createElement("son");
112             son.setAttribute("id", "004");
113             
114             Element name = xmldoc.createElement("name");
115             name.setTextContent("小儿子");
116             son.appendChild(name);
117 
118             Element age = xmldoc.createElement("name");
119             age.setTextContent("0");
120             son.appendChild(age);
121             
122             root.appendChild(son);
123             //保存
124             TransformerFactory factory = TransformerFactory.newInstance();
125             Transformer former = factory.newTransformer();
126             former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));
127             
128         }catch(Exception e){
129             e.printStackTrace();
130         }
131     }
132     
133     public static Node selectSingleNode(String express, Element source) {
134         Node result=null;
135         XPathFactory xpathFactory=XPathFactory.newInstance();
136         XPath xpath=xpathFactory.newXPath();
137         try {
138             result=(Node) xpath.evaluate(express, source, XPathConstants.NODE);
139         } catch (XPathExpressionException e) {
140             e.printStackTrace();
141         }
142         
143         return result;
144     }
145     
146     public static void main(String[] args){
147         getFamilyMemebers();
148         System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
149         modifySon();
150         System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
151         getFamilyMemebers();
152         System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
153         discardSon();
154         System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
155         getFamilyMemebers();
156         System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
157         createSon();
158         System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
159         getFamilyMemebers();
160     }
161 }
View Code

运行结果:

转载于:https://my.oschina.net/u/204616/blog/545444

相关文章:

测试一下,你能小学毕业吗?

昨天在群里大家讨论了上面那道小学六年级的五星题&#xff0c;不知道有没有同学能够不用三角函数&#xff0c;不用积分做出来的&#xff1f;先别往后看&#xff0c;测试一下吧&#xff01;看看是不是要跟小编一起重新背起小书包返回小学&#xff0c;重新学习了。 现在小学生的…

This is A PostXing Test

Test 一下下 试看看~~~ ABC试一下代码...1 public class PostApplicationExitActivationProcess2 {3 /// <summary>4 /// The main entry point for the application.5 /// </summary>6 [STAThread]7 static void Main( string[] args) 8 {9 if (…

缓存穿透、并发和失效的解决方案

我们在用缓存的时候&#xff0c;不管是Redis或者Memcached&#xff0c;基本上会通用遇到以下三个问题&#xff1a; 缓存穿透 缓存并发 缓存失效 缓存穿透 注&#xff1a;上面三个图会有什么问题呢&#xff1f; 我们在项目中使用缓存通常都是先检查缓存中是否存在&#xff0c;…

CentOS 7 命令

Centos 7 目录说明 / / 是根目录。 /bin 软连接到 /usr/bin。可以理解/bin 是 /usr/bin 的快捷方式。 /lib 软连接到 /usr/lib。 /lib64 软连接到 /usr/lib64。 /sbin 软连接到 /usr/sbin。 /usr软件安装位置 /usr/bin 为系统命令所在目录。 /usr/local 为安装程序所在目录。 /…

算法基础知识科普:8大搜索算法之AVL树(上)

前段时间介绍了二叉搜索树&#xff08;BST&#xff09;&#xff0c;我们知道这种搜索结构存在的弊端是对输入序列存在强依赖&#xff0c;若输入序列基本有序&#xff0c;则BST近似退化为链表。这样就会大大降低搜索的效率。AVL树以及Red-Black树就是为了解决这个问题&#xff0…

GARFIELD@04-09-2005

a technical facto 转载于:https://www.cnblogs.com/rexhost/archive/2005/04/09/134701.html

Vue.js学习系列(四十二)-- Vue.js组件

2019独角兽企业重金招聘Python工程师标准>>> 组件&#xff08;Component&#xff09;是Vue.js最强大的功能之一。组件可以扩展HTML元素&#xff0c;封装可重用的代码。组件系统让我们可以用独立可复用的小组件来构建大型应用&#xff0c;几乎任 意类型的应用的界面都…

java sqlite使用小记

2019独角兽企业重金招聘Python工程师标准>>> Sqlite教程&#xff1a; http://www.runoob.com/sqlite/sqlite-tutorial.html 加载sqlite jdbc驱动&#xff1a; static{ try { Class.forName("org.sqlite.JDBC"); } catch (ClassNotFoundException e) { e.p…

算法基础知识科普:8大搜索算法之AVL树(中)

昨天我们介绍了平衡二叉树的基本概念&#xff0c;通过平衡因子来控制左右子树的深度&#xff0c;使得整个二叉搜索树始终保持平衡状态。这个算法的核心在于当平衡因子超过范围&#xff0c;如何通过旋转的方式来使二叉搜索树保持平衡&#xff0c;以及平衡后对应结点平衡因子如何…

Linux登录那点事

跨平台系列汇总&#xff1a;http://www.cnblogs.com/dunitian/p/4822808.html#linux 我们登录linux的时候基本上不太关注上面的这个提示&#xff0c;其实这个还是有点文章的 简单解释一下&#xff1a; 上一次dnt用户登录的时间&#xff0c;以及终端是tty1 知识普及&#xff1a;…

解决了一个遗留的Portlet奇怪问题

在做Portlet的时候碰到一个奇怪的问题&#xff0c;使用Java应用程序来进行RFT传输好好的&#xff0c;但在Pluto下&#xff0c;同样的一段程序却不行&#xff0c;提示&#xff1a;No client transport named https found!  搜索GT官网的maillist&#xff0c;发现有人提到是AXI…

Python 程序如何高效地调试?

Python在debug方面的支持还是不错的&#xff0c;在明确代码意义的情况下&#xff0c;通过log、print和assert分析错误原因&#xff0c;配合单元测试可以很高效。然而&#xff0c;实际工作中大量代码很可能出自他人之手&#xff0c;这种情况下&#xff0c;使用debugger就显得更加…

selenium中javascript调试

之前写了使用js输入长文件的文章&#xff0c;有同事在使用时&#xff0c;发现竟然无法输入&#xff0c;也不知道是什么原因&#xff0c;且用的还是id方式。 在参考网文后&#xff0c;才发现是js写的有问题&#xff0c;现总结一下 javascript调试&#xff0c;在firefox中就自带有…

算法基础知识科普:8大搜索算法之AVL树(下)

昨天我们介绍了在进行结点插入时&#xff0c;若左子树深度超过右子树深度两层则进行右旋来保持平衡。今天继续介绍&#xff0c;若右子树深度超过左子树深度两层时的左旋操作&#xff0c;以及删除结点后平衡因子的变更问题。 这些都掌握后&#xff0c;基本上对AVL就有一个很全面…

《代码敲不队》第八次团队作业:Alpha冲刺 第二天

项目内容这个作业属于哪个课程任课教师博客主页链接这个作业的要求在哪里作业链接地址团队名称代码敲不队作业学习目标掌握软件编码实现的工程要求。团队项目github仓库地址链接 GitHub 第二天 日期&#xff1a;2019/6/16 今日完成任务情况以及遇到的问题 针对设计好的数据库&a…

我的.net程序为何不能执行?

今天早上习惯性的打开公司内部的网站。不料却发现我在输入地址后&#xff0c;系统竟会弹出一个对话框要求输入用户名和密码。想了想后&#xff0c;输入了AD的密码&#xff0c;就可以进入了网站。不经意间我又发现所有的asp.net的页面都不能打开&#xff0c;而asp的页面却一点问…

利用MySQL触发器实现check和assertion

MySQL虽然输入check语句不会报错&#xff0c;但是实际上并没有check的功能。但是MySQL 依然可以利用触发器来实现相应功能。 本文将根据两个例子简要阐述MySQL实现check和assertion的思路。 MySQL触发器 官方文档 MySQL Signal 官方文档 注意 signal异常处理功能在MySQL5.5版本…

算法基础知识科普:8大搜索算法之红黑树(上)

平衡二叉树&#xff08;AVL&#xff09;是一种特殊的二叉搜索树&#xff08;BST&#xff09;&#xff0c;即每个结点的值都大于其左子树且小于其右子树的值&#xff08;若存在&#xff09;&#xff0c;并通过引入平衡因子的概念来保持树的平衡。平衡二叉树算法的重点是在插入、…

Java Web学习总结(17)——JSP属性范围

2019独角兽企业重金招聘Python工程师标准>>> 所谓的属性范围就是一个属性设置之后&#xff0c;可以经过多少个其他页面后仍然可以访问的保存范围。 一、JSP属性范围 JSP中提供了四种属性范围&#xff0c;四种属性范围分别指以下四种&#xff1a; 当前页&#xff1a;…

为什么不提供离线Blog管理工具呢?

网络Blog现在是到处开花, 好像全世界的网民都开始写Blog了. 但因为Web的HTTP无状态协议, 网站本身都自己设置有session过期时间. 如果写的Blog文字多,时间一长用户登录状态就没了,当你提交你的文字时系统会出错,结果你回来时,你辛辛苦苦写的长长的文字都没了, 你是不是很气愤?…

javascript a 标签打开相对路径,绝对路径

<a>标签中的href中&#xff0c;如果你写一个路径默认是以相对路径打开的&#xff0c;加上"http://" 消息头那就可以打开绝对路径 html&#xff1a; <a hrefjavascript:void(0); target_blank onclickCommon.openUrl(" rowObject.baiduPanUrl ")…

算法基础知识科普:8大搜索算法之红黑树(中)

红黑树也是一种特殊形式的二叉搜索树&#xff0c;通过结点的颜色以及三条规则来保证二叉搜索树的平衡。规则1&#xff1a;根结点的颜色是黑色&#xff0c;规则2&#xff1a;叶子结点到根结点路径上遇到的黑色结点数目相同&#xff0c;规则3&#xff1a;叶子结点到根结点路径上无…

Java基础学习总结(3)——抽象类

2019独角兽企业重金招聘Python工程师标准>>> 一、抽象类介绍 下面通过一下的小程序深入理解抽象类 因此在类Animal里面只需要定义这个enjoy()方法就可以了&#xff0c;使用abstract关键字把enjoy()方法定义成一个抽象方法&#xff0c;定义如下&#xff1a;public ab…

Knuth(佩服的一塌糊涂)

Donald Knuth自传的开头这样写道&#xff1a;“Donald Knuth真的只是一个人么&#xff1f;”(我觉得不是&#xff0c;^_^)作为世界顶级计算机科学家之一&#xff0c;Knuth教授已经完成了编译程序、属性文法和运算法则的前沿研究&#xff0c;并编著完成了已在程序设计领域中具有…

编程基础知识科普:C#中的问号运算符

C#是一门非常性感的语言&#xff0c;时不时冒出一些语法糖来满足大家的需求&#xff0c;问号运算符就是其中的一种。我们知道基础数据类型的默认值都是基础数据类型的&#xff0c;如int为0&#xff0c;double为0.0&#xff0c;bool为false等等&#xff0c;而引用类型的默认值为…

Listener监听器之HttpSessionListener

编写一个OnlineUserListener。 package anni; import java.util.List; import javax.servlet.ServletContext; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionListener; import javax.servlet.http.HttpSessionEvent;public class OnlineUserL…

ActiveMQ快速入门

2019独角兽企业重金招聘Python工程师标准>>> 1.下载ActiveMQ 去官方网站下载&#xff1a;http://activemq.apache.org/ 2.运行ActiveMQ 解压缩apache-activemq-5.5.1-bin.zip&#xff0c;然后双击apache-activemq-5.5.1\bin\activemq.bat运行ActiveMQ程序。 启动Act…

企业为什么要使用基于Docker的PaaS/CaaS平台

作者&#xff1a;精灵云 前言早在十多年前国内外的一些大厂就开始投入研发和使用容器技术&#xff0c;比如Google&#xff0c;对他们来说&#xff0c;使用容器能够充分利用计算资源节省硬件成本。而这几年——众所周知——真正把容器技术发扬光大的是Docker。Docker的slogan“B…

算法基础知识科普:8大搜索算法之红黑树(下)

这是介绍红黑树的最后一部分&#xff0c;令y为要删除结点&#xff0c;n为要删除结点的子结点&#xff08;子结点最多有1个&#xff09;&#xff0c;w为y的兄弟结点&#xff0c;删除操作的重点是使红黑树删除结点并通过调整后仍满足自身是搜索二叉树和设定的三点规则。删除操作可…

asp提供在线文章翻译的功能(转)

有时候想为我们的网页提供多语言支持&#xff0c;如果一种语言用一张网页来做实在太麻烦了&#xff0c;幸好Google提供了语言工具功能&#xff0c;下面介绍如何利用它来实现网页多种语言之间的转换。 作者&#xff1a;淘特网 出处&#xff1a;http://www.tot.name 注&#xff1…