作者:伊那里 | 来源:互联网 | 2014-05-05 09:01
XML作为全球通用的结构化语言,越来越受人们青睐,各种开发平台(比如MicrosoftStudio系列、Oracle系列、InpriseBorland系列等)也都把支撑XML开发作为宣传口号之一。在很多项目中利用XM
XML作为全球通用的结构化语言,越来越受人们青睐,各种开发平台(比如Microsoft Studio系列、Oracle系列、Inprise Borland系列等)也都把支撑XML开发作为宣传口号之一。在很多项目中利用XML数据交换信息,省往了很多麻烦事,不用制定繁锁的数据格局,利用XML数据易于表达,也利于一线开发者跟踪调试。
在XML利用中,最常用也最实用的莫过于XML文件的读写,所以笔者通过一个简略的XML文件读写来作简要分析。可以在任何文本编纂器中先建立如下结构的XML文件,类似于HTML结构,但XML语义比拟严格,起始标记必需配对,比如"〈学生花名册〉"与"〈/学生花名册〉"对应,空格多少可不必在意,但一般都以缩格情势书写,便于浏览。把此文件命名为Input.xml,可以在任何支撑XML的浏览器中打开测试一下,假如输进准确,在浏览中可以看到此文件的树形表现结构。假如您还对XML结构感到比拟陌生,建议先看看《简析Delphi中的XML编程》一文中关于XML文件的阐明。
<学生花名册> <学生 性别 = "男"> <姓名>李华姓名> <年纪>14年纪> <电话>6287555电话> 学生> <学生 性别 = "男"> <姓名>张三姓名> <年纪>16年纪> <电话>8273425电话> 学生> 学生花名册>
准备工作做完后,接着就开端写本质性的JAVA代码了。为保留从XML文件读进的信息,需要先建一个简略的Bean来保留学生信息,命名为StudentBean,代码如下所示:
public class StudentBean { private String ***; //学生性别 private String name; //学生姓名 private int age; //学生年纪 private String phone; //电话号码public void setSex(String s) { *** = s; } public void setName(String s) { name = s; } public void setAge(int a) { age = a; } public void setPhone(String s) { phOne= s; } public String getSex() { return ***; } public String getName() { return name; } public int getAge() { return age; } public String getPhone() { return phone; } }
之后写XML的测试类,笔者把这个类命名为XMLTest,为了读写XML文件,需要导进如下JAVA包,"//"后为注释阐明,笔者的环境是JDK 1.3.1_04,在JDK 1.4.0中测试也通过,XML说明器用Apache的Crimson,可以到Apache主页往上载。
import java.io.*; //Java基础包,包含各种IO把持 import java.util.*; //Java基础包,包含各种尺度数据结构把持 import javax.xml.parsers.*; //XML解析器接口 import org.w3c.dom.*; //XML的DOM实现 import org.apache.crimson.tree.XmlDocument; //写XML文件要用到
为了保留多个学生信息,还得借助一个聚集类(并不是单纯意义上的聚集,JAVA中的聚集是聚集框架的概念,包含向量、列表、哈希表等),这里采用Vector向量类。定义在XMLTest测试类中,命名为student_Vector。然后定义两个方法readXMLFile和writeXMLFile,实现读写把持。代码如下:
private void readXMLFile(String inFile) throws Exception { //为解析XML作准备 //创立DocumentBuilderFactory实例,指定DocumentBuilder DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = null; try { db = dbf.newDocumentBuilder(); } catch (ParserConfigurationException pce) { System.err.println(pce); //出异常时输出异常信息,然后退出,下同 System.exit(1); } Document doc = null; try { doc = db.parse(inFile); } catch (DOMException dom) { System.err.println(dom.getMessage()); System.exit(1); } catch (IOException ioe) { System.err.println(ioe); System.exit(1); } //下面是解析XML的全过程, //比拟简略,先取根元素"学生花名册" Element root = doc.getDocumentElement(); //取"学生"元素列表 NodeList students = root.getElementsByTagName("学生"); for (int i = 0; i //依次取每个"学生"元素 Element student = (Element) students.item(i); //创立一个学生的Bean实例 StudentBean studentBean = new StudentBean(); //取学生的性别属性 studentBean.setSex(student.getAttribute("性别")); //取"姓名"元素,下面类同 NodeList names = student.getElementsByTagName("姓名"); if (names.getLength() == 1) { Element e = (Element) names.item(0); Text t = (Text) e.getFirstChild(); studentBean.setName(t.getNodeValue()); }NodeList ages = student.getElementsByTagName("年纪"); if (ages.getLength() == 1) { Element e = (Element) ages.item(0); Text t = (Text) e.getFirstChild(); studentBean.setAge(Integer.parseInt(t.getNodeValue())); }NodeList phOnes= student.getElementsByTagName("电话"); if (phones.getLength() == 1) { Element e = (Element) phones.item(0); Text t = (Text) e.getFirstChild(); studentBean.setPhone(t.getNodeValue()); }student_Vector.add(studentBean); } }private void writeXMLFile(String outFile) throws Exception { //为解析XML作准备, //创立DocumentBuilderFactory实例,指定DocumentBuilder DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = null; try { db = dbf.newDocumentBuilder(); } catch (ParserConfigurationException pce) { System.err.println(pce); System.exit(1); }Document doc = null; doc = db.newDocument();//下面是建立XML文档内容的过程, /先建立根元素"学生花名册" Element root = doc.createElement("学生花名册"); //根元素添加上文档 doc.appendChild(root);//取学生信息的Bean列表 for (int i = 0; i //依次取每个学生的信息 StudentBean studentBean = (StudentBean) student_Vector.get(i); //建立"学生"元素,添加到根元素 Element student = doc.createElement("学生"); student.setAttribute("性别", studentBean.getSex()); root.appendChild(student); //建立"姓名"元素,添加到学生下面,下同 Element name = doc.createElement("姓名"); student.appendChild(name); Text tName = doc.createTextNode(studentBean.getName()); name.appendChild(tName);Element age = doc.createElement("年纪"); student.appendChild(age); Text tAge = doc.createTextNode(String.valueOf(studentBean.getAge())); age.appendChild(tAge);Element phOne= doc.createElement("电话"); student.appendChild(phone); Text tPhOne= doc.createTextNode(studentBean.getPhone()); phone.appendChild(tPhone); } //把XML文档输出到指定的文件 FileOutputStream outStream = new FileOutputStream(outFile); OutputStreamWriter outWriter = new OutputStreamWriter(outStream); ((XmlDocument) doc).write(outWriter, "GB2312");
推荐阅读
如何利用Apache与Nginx高效实现动静态内容分离 ...
[详细]
蜡笔小新 2024-10-29 21:47:55
深入解析Tomcat:开发者的实用指南 ...
[详细]
蜡笔小新 2024-10-31 09:46:02
wxParse 0.3 是一款专为微信小程序设计的高级富文本解析器,支持 HTML 和 Markdown 转换为 WXML 可视化格式。该组件不仅能够处理复杂的多级嵌套结构,还全面支持 Emoji 表情,极大地提升了内容展示的多样性和用户体验。 ...
[详细]
蜡笔小新 2024-11-01 19:12:59
本文详细解析了JSONP(JSON with Padding)的跨域机制及其工作原理。JSONP是一种通过动态创建``标签来实现跨域请求的技术,其核心在于利用了浏览器对``标签的宽松同源策略。文章不仅介绍了JSONP的产生背景,还深入探讨了其具体实现过程,包括如何构造请求、服务器端如何响应以及客户端如何处理返回的数据。此外,还分析了JSONP的优势和局限性,帮助读者全面理解这一技术在现代Web开发中的应用。 ...
[详细]
蜡笔小新 2024-11-01 19:08:41
通过自定义 `TextView`,实现了在用户点击或焦点变化时动态调整字体颜色的效果。该方法利用了 `ColorStateList` 和 `Selector` 资源文件,确保了界面交互的流畅性和视觉效果的提升。具体实现中,通过重写 `onTouchEvent` 和 `onFocusChanged` 方法,精确控制了颜色变化的时机和状态。此外,还对性能进行了优化,确保在高频率操作下依然保持高效响应。 ...
[详细]
蜡笔小新 2024-11-01 14:08:50
当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ...
[详细]
蜡笔小新 2024-10-31 10:28:12
在Gradle构建系统中,`Project` 是一个核心组件,扮演着至关重要的角色。通过使用 `./gradlew projects` 命令,可以清晰地列出当前项目结构中包含的所有子项目,这有助于开发者更好地理解和管理复杂的多模块项目。此外,`Project` 对象还提供了丰富的配置选项和生命周期管理功能,使得构建过程更加灵活高效。 ...
[详细]
蜡笔小新 2024-10-31 09:53:03
本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ...
[详细]
蜡笔小新 2024-10-30 20:46:43
在处理大规模并发请求时,传统的多线程或多进程模型往往无法有效解决性能瓶颈问题。尽管它们在处理小规模任务时能提升效率,但在高并发场景下,系统资源的过度消耗和上下文切换的开销会显著降低整体性能。相比之下,Python 的 `asyncio` 模块通过协程提供了一种轻量级且高效的并发解决方案。本文将深入解析 `asyncio` 模块的原理及其在实际应用中的优化技巧,帮助开发者更好地利用协程技术提升程序性能。 ...
[详细]
蜡笔小新 2024-10-30 18:17:34
本项目旨在优化可转债数据的智能抓取与分析平台。通过爬取集思录上的可转债信息(排除已发布赎回的债券),并结合安道全教授提出的三条安全线投资策略,新增了建仓线、加仓线和重仓线,以提供更精准的投资建议。 ...
[详细]
蜡笔小新 2024-10-30 17:40:17
在构建基于Spring MVC框架的Java Web应用项目时,首先应创建一个新的动态Web项目。接着,需将必要的JAR包导入至WebContent/WEB-INF/lib目录下,确保包括Spring核心库及相关依赖。如遇缺失的JAR包,可向社区求助或通过Maven等工具自动下载。正确配置后,即可开始搭建应用结构与功能模块。 ...
[详细]
蜡笔小新 2024-10-30 17:05:55
本文深入探讨了 HTML 中的 `margin` 属性,详细解析了其基本特性和应用场景。文章不仅介绍了 `margin` 的基本概念,还重点讨论了垂直外边距合并现象,并分析了 `margin` 在块级元素与内联元素中的不同表现。通过实例和代码示例,帮助读者全面理解 `margin` 的使用技巧和常见问题。 ...
[详细]
蜡笔小新 2024-10-30 15:08:31
在Spring框架中,基于Schema的异常通知与环绕通知的实现方法具有重要的实践价值。首先,对于异常通知,需要创建一个实现ThrowsAdvice接口的通知类。尽管ThrowsAdvice接口本身不包含任何方法,但开发者需自定义方法来处理异常情况。此外,环绕通知则通过实现MethodInterceptor接口来实现,允许在方法调用前后执行特定逻辑,从而增强功能或进行必要的控制。这两种通知机制的结合使用,能够有效提升应用程序的健壮性和灵活性。 ...
[详细]
蜡笔小新 2024-10-30 13:30:04
本文深入探讨了IO复用技术的原理与实现,重点分析了其在解决C10K问题中的关键作用。IO复用技术允许单个进程同时管理多个IO对象,如文件、套接字和管道等,通过系统调用如`select`、`poll`和`epoll`,高效地处理大量并发连接。文章详细介绍了这些技术的工作机制,并结合实际案例,展示了它们在高并发场景下的应用效果。 ...
[详细]
蜡笔小新 2024-10-29 18:24:19
### 摘要Wget 是一个广泛使用的命令行工具,用于从 Web 服务器下载文件。CVE-2016-4971 漏洞涉及 Wget 在处理特定 HTTP 响应头时的缺陷,可能导致远程代码执行。本文详细分析了该漏洞的成因、利用方法以及相应的安全防范措施,包括更新 Wget 版本、配置防火墙规则和使用安全的 HTTP 头。通过这些措施,可以有效防止潜在的安全威胁。 ...
[详细]
蜡笔小新 2024-10-29 14:04:47