热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

69期JavaSE029_XML解析

###综合练习使用Socket和多线程编写一个简单的聊天小程序,要求客户端和服务端交替发送消息,在客户端和服务端都能看到彼此的聊天记录。Serverja

 

### 综合练习使用 Socket 和多线程编写一个简单的聊天小程序,要求客户端和服务端交替发送消息,在客户端和服务端都能看到彼此的聊天记录。Server```java
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;public class Server {public static void main(String[] args) {ServerSocket serverSocket = null;Socket socket = null;try {serverSocket = new ServerSocket(8080);System.out.println("服务端已启动");while(true) {socket = serverSocket.accept();new Thread(new SocketThread(socket)).start();;}} catch (IOException e) {// TODO Auto-generated catch block
e.printStackTrace();}}
}
```ServerThread```java
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;public class SocketThread implements Runnable {private Socket socket;public SocketThread(Socket socket) {this.socket = socket;}@Overridepublic void run() {// TODO Auto-generated method stubInputStream inputStream = null;DataInputStream dataInputStream = null;Scanner scanner = new Scanner(System.in);String message = null;OutputStream outputStream = null;DataOutputStream dataOutputStream = null;try {while(true) {//inputStream = socket.getInputStream();dataInputStream = new DataInputStream(inputStream);message = dataInputStream.readUTF();System.out.println("客户端:"+message);//System.out.print("服务器:");message = scanner.next();outputStream = socket.getOutputStream();dataOutputStream = new DataOutputStream(outputStream);dataOutputStream.writeUTF(message);}} catch (IOException e) {// TODO Auto-generated catch block
e.printStackTrace();}finally {try {dataOutputStream.close();outputStream.close();dataInputStream.close();inputStream.close();} catch (IOException e) {// TODO Auto-generated catch block
e.printStackTrace();}}}
}
```Client```java
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;public class Client {public static void main(String[] args) {Socket socket = null;InputStream inputStream = null;DataInputStream dataInputStream = null;OutputStream outputStream = null;DataOutputStream dataOutputStream = null;System.out.println("客户端已启动...");try {socket = new Socket("127.0.0.1", 8080);Scanner scanner = new Scanner(System.in);String message = null;while(true) {//System.out.print("客户端:");message = scanner.next();outputStream = socket.getOutputStream();dataOutputStream = new DataOutputStream(outputStream);dataOutputStream.writeUTF(message);//inputStream = socket.getInputStream();dataInputStream = new DataInputStream(inputStream);message = dataInputStream.readUTF();System.out.println("服务器:"+message);}} catch (UnknownHostException e) {// TODO Auto-generated catch block
e.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch block
e.printStackTrace();}finally {try {dataInputStream.close();inputStream.close();dataOutputStream.close();outputStream.close();} catch (IOException e) {// TODO Auto-generated catch block
e.printStackTrace();}}}
}
```### XML 解析XML:Extensible Markup Language 可扩展标记语言特点:XML 与操作系统无关、与编程语言无关,可以实现不同系统之间的数据交换。XML 文档内容由一系列标签元素组成
<标签名 属性名&#61;"属性值">元素内容- 属性值用双引号包裹
- 一个元素可以包含多个属性
- 属性值中不能直接包含<、>、"、&、&#39;

&#96;&#96;&#96;xml

张三Java高级编程Java是一门面向对象高级编程语言

&#96;&#96;&#96;注意事项
- 所有 XML 元素都必须有结束标签
- XML 标签对大小写敏感
- XML 必须有正确的嵌套
- 同级标签以缩进对齐
- 元素名称可以包含字母、数字或其他字符
- 元素名称不能以数字或标点符号开头
- 元素名称不能包含空格XML 的转义字符特殊字符&#xff1a;<> " &#39; &

转义符&#xff1a;&#96;&#96;&#96;
<> " ' &amp;
&#96;&#96;&#96;衣服型号 对应身高S
<165M 165-170L 170-175XL 175-180XXL 180-185&#96;&#96;&#96;xml

165">SMLXLXXL

&#96;&#96;&#96;考生姓名 预计得分 实际得分张三
75 80李四 75 88&#96;&#96;&#96;xml



&#96;&#96;&#96;### 解析XML用 Java 程序读取、操作 XML 文件中的数据dom4j 主流的 Java XML API&#xff0c;性能优异&#xff0c;功能强大。&#96;&#96;&#96;xml



&#96;&#96;&#96;&#96;&#96;&#96;java
import java.util.Iterator;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;public class Test {public static void main(String[] args) {SAXReader saxReader &#61; new SAXReader();try {Document document &#61; saxReader.read("src/phone.xml");//获取根节点Element root &#61; document.getRootElement();Iterator rootIter &#61; root.elementIterator();while(rootIter.hasNext()) {Element ele &#61; rootIter.next();String name &#61; ele.attributeValue("name");System.out.println(name);Iterator eleIter &#61; ele.elementIterator();while(eleIter.hasNext()) {Element type &#61; eleIter.next();String typeName &#61; type.attributeValue("name");System.out.println(typeName);}}} catch (DocumentException e) {// TODO Auto-generated catch block
e.printStackTrace();}}
}
&#96;&#96;&#96;&#96;&#96;&#96;java
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Writer;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;public class Test2 {public static void main(String[] args) {SAXReader saxReader &#61; new SAXReader();try {Document document &#61; saxReader.read("src/phone.xml");Element root &#61; document.getRootElement();Element newEle &#61; root.addElement("brand");newEle.addAttribute("name", "Vivo");Element type &#61; newEle.addElement("type");type.addAttribute("name", "型号1");OutputFormat format &#61; OutputFormat.createPrettyPrint();format.setEncoding("UTF-8");Writer fileWriter &#61; new FileWriter("src/phone.xml");XMLWriter writer &#61; new XMLWriter(fileWriter,format);writer.write(document);writer.close();} catch (DocumentException e) {// TODO Auto-generated catch block
e.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch block
e.printStackTrace();}}
}
&#96;&#96;&#96;

Client.java

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;public class Client {public static void main(String[] args) {Socket socket &#61; null;InputStream inputStream &#61; null;DataInputStream dataInputStream &#61; null;OutputStream outputStream &#61; null;DataOutputStream dataOutputStream &#61; null;System.out.println("客户端已启动...");try {socket &#61; new Socket("127.0.0.1", 8080);Scanner scanner &#61; new Scanner(System.in);String message &#61; null;while(true) {//System.out.print("客户端&#xff1a;");message &#61; scanner.next();outputStream &#61; socket.getOutputStream();dataOutputStream &#61; new DataOutputStream(outputStream);dataOutputStream.writeUTF(message);//inputStream &#61; socket.getInputStream();dataInputStream &#61; new DataInputStream(inputStream);message &#61; dataInputStream.readUTF();System.out.println("服务器&#xff1a;"&#43;message);}} catch (UnknownHostException e) {// TODO Auto-generated catch block
e.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch block
e.printStackTrace();}finally {try {dataInputStream.close();inputStream.close();dataOutputStream.close();outputStream.close();} catch (IOException e) {// TODO Auto-generated catch block
e.printStackTrace();}}}
}

 

cloth.xml

xml version&#61;"1.0" encoding&#61;"UTF-8"?>
<cloth><size range&#61;"height>165">Ssize><size range&#61;"165>Msize><size range&#61;"170>Lsize><size range&#61;"175>XLsize><size range&#61;"180>XXLsize>
cloth>

 

phone.xml

xml version&#61;"1.0" encoding&#61;"UTF-8"?><phoneinfo id&#61;"1"> <brand name&#61;"华为"> <type name&#61;"U8650"/> <type name&#61;"HW123"/> <type name&#61;"HW321"/> brand> <brand name&#61;"苹果"> <type name&#61;"iPhone"/> brand> <brand name&#61;"三星"> <type name&#61;"Note4"/> brand> <brand name&#61;"Vivo"/> <brand name&#61;"Vivo"><type name&#61;"型号1"/>brand>
phoneinfo>

 

score.xml

xml version&#61;"1.0" encoding&#61;"UTF-8"?>
<students><student name&#61;"张三" expected_score&#61;"75" score&#61;"80">student><student name&#61;"李四" expected_score&#61;"75" score&#61;"88">student>
students>

 

Server.java

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;public class Server {public static void main(String[] args) {ServerSocket serverSocket &#61; null;Socket socket &#61; null;try {serverSocket &#61; new ServerSocket(8080);System.out.println("服务端已启动");while(true) {socket &#61; serverSocket.accept();new Thread(new SocketThread(socket)).start();;}} catch (IOException e) {// TODO Auto-generated catch block
e.printStackTrace();}}
}

 

SocketThread.java

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;public class SocketThread implements Runnable {private Socket socket;public SocketThread(Socket socket) {this.socket &#61; socket;}&#64;Overridepublic void run() {// TODO Auto-generated method stubInputStream inputStream &#61; null;DataInputStream dataInputStream &#61; null;Scanner scanner &#61; new Scanner(System.in);String message &#61; null;OutputStream outputStream &#61; null;DataOutputStream dataOutputStream &#61; null;try {while(true) {//inputStream &#61; socket.getInputStream();dataInputStream &#61; new DataInputStream(inputStream);message &#61; dataInputStream.readUTF();System.out.println("客户端&#xff1a;"&#43;message);//System.out.print("服务器&#xff1a;");message &#61; scanner.next();outputStream &#61; socket.getOutputStream();dataOutputStream &#61; new DataOutputStream(outputStream);dataOutputStream.writeUTF(message);}} catch (IOException e) {// TODO Auto-generated catch block
e.printStackTrace();}finally {try {dataOutputStream.close();outputStream.close();dataInputStream.close();inputStream.close();} catch (IOException e) {// TODO Auto-generated catch block
e.printStackTrace();}}}}

 

Test.java

import java.util.Iterator;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;public class Test {public static void main(String[] args) {SAXReader saxReader &#61; new SAXReader();try {Document document &#61; saxReader.read("src/phone.xml");//获取根节点Element root &#61; document.getRootElement();Iterator rootIter &#61; root.elementIterator();while(rootIter.hasNext()) {Element ele &#61; rootIter.next();String name &#61; ele.attributeValue("name");System.out.println(name);Iterator eleIter &#61; ele.elementIterator();while(eleIter.hasNext()) {Element type &#61; eleIter.next();String typeName &#61; type.attributeValue("name");System.out.println(typeName);}}} catch (DocumentException e) {// TODO Auto-generated catch block
e.printStackTrace();}}
}

 

test.xml

xml version&#61;"1.0" encoding&#61;"UTF-8"?>
<books><book id&#61;"001"><author>张三author><name>Java高级编程name><description>Java是一门面向对象高级编程语言description>book><book id&#61;"002" author&#61;"李四" name&#61;"C#" description&#61;"面向对象">book>
books>

 

Test2.java

import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Writer;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;public class Test2 {public static void main(String[] args) {SAXReader saxReader &#61; new SAXReader();try {Document document &#61; saxReader.read("src/phone.xml");Element root &#61; document.getRootElement();Element newEle &#61; root.addElement("brand");newEle.addAttribute("name", "Vivo");Element type &#61; newEle.addElement("type");type.addAttribute("name", "型号1");OutputFormat format &#61; OutputFormat.createPrettyPrint();format.setEncoding("UTF-8");Writer fileWriter &#61; new FileWriter("src/phone.xml");XMLWriter writer &#61; new XMLWriter(fileWriter,format);writer.write(document);writer.close();} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

 

转:https://www.cnblogs.com/HiJackykun/p/11173474.html



推荐阅读
  • 微信小程序实现类似微博的无限回复功能,内置云开发数据库支持
    本文详细介绍了如何利用微信小程序实现类似于微博的无限回复功能,并充分利用了微信云开发的数据库支持。文中不仅提供了关键代码片段,还包含了完整的页面代码,方便开发者按需使用。此外,HTML页面中包含了一些示例图片,开发者可以根据个人喜好进行替换。文章还将展示详细的数据库结构设计,帮助读者更好地理解和实现这一功能。 ... [详细]
  • 如何利用Java 5 Executor框架高效构建和管理线程池
    Java 5 引入了 Executor 框架,为开发人员提供了一种高效管理和构建线程池的方法。该框架通过将任务提交与任务执行分离,简化了多线程编程的复杂性。利用 Executor 框架,开发人员可以更灵活地控制线程的创建、分配和管理,从而提高服务器端应用的性能和响应能力。此外,该框架还提供了多种线程池实现,如固定线程池、缓存线程池和单线程池,以适应不同的应用场景和需求。 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • 本文详细探讨了 jQuery 中 `ajaxSubmit` 方法的使用技巧及其应用场景。首先,介绍了如何正确引入必要的脚本文件,如 `jquery.form.js` 和 `jquery-1.8.0.min.js`。接着,通过具体示例展示了如何利用 `ajaxSubmit` 方法实现表单的异步提交,包括数据的发送、接收和处理。此外,还讨论了该方法在不同场景下的应用,如文件上传、表单验证和动态更新页面内容等,提供了丰富的代码示例和最佳实践建议。 ... [详细]
  • 在Android应用开发中,实现与MySQL数据库的连接是一项重要的技术任务。本文详细介绍了Android连接MySQL数据库的操作流程和技术要点。首先,Android平台提供了SQLiteOpenHelper类作为数据库辅助工具,用于创建或打开数据库。开发者可以通过继承并扩展该类,实现对数据库的初始化和版本管理。此外,文章还探讨了使用第三方库如Retrofit或Volley进行网络请求,以及如何通过JSON格式交换数据,确保与MySQL服务器的高效通信。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 第六章:枚举类型与switch结构的应用分析
    第六章深入探讨了枚举类型与 `switch` 结构在编程中的应用。枚举类型(`enum`)是一种将一组相关常量组织在一起的数据类型,广泛存在于多种编程语言中。例如,在 Cocoa 框架中,处理文本对齐时常用 `NSTextAlignment` 枚举来表示不同的对齐方式。通过结合 `switch` 结构,可以更清晰、高效地实现基于枚举值的逻辑分支,提高代码的可读性和维护性。 ... [详细]
  • 在 CentOS 6.5 系统上部署 VNC 服务器的详细步骤与配置指南
    在 CentOS 6.5 系统上部署 VNC 服务器时,首先需要确认 VNC 服务是否已安装。通常情况下,VNC 服务默认未安装。可以通过运行特定的查询命令来检查其安装状态。如果查询结果为空,则表明 VNC 服务尚未安装,需进行手动安装。此外,建议在安装前确保系统的软件包管理器已更新至最新版本,以避免兼容性问题。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • 公司计划部署邮件服务器,考虑到已有域名,决定自行搭建内部邮件服务器。经过综合考量,最终选择在Linux环境中进行搭建,并记录了相关配置和实践过程。本文将详细介绍Postfix的基本设置步骤和实践经验,帮助读者快速掌握邮件服务器的搭建方法。 ... [详细]
author-avatar
幸福的小兔子3
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有