最近在研究开源软件“局域网聊天工具 Net-C”,项目主页为http://dgtalize.com/products/netc,里面有几段代码是用dom4j来读写xml文件的,本人使用较新的dom4j2.0改写了其中的这段代码。
xml文件为:
config.xml
1. <?xml version="1.0" encoding="UTF-8"?>
2. <!--
3. Document : config.xml
4. Created on : 19 de marzo de 2008, 22:37
5. Author : Diego
6. Description: Configuration file por Net-C
7. --><config>
8. <param>
9. <name>ipBroadcast</name>
10. <value>192.168.255.255</value>
11. </param>
12. <param>
13. <name>portBroadcast</name>
14. <value>41516</value>
15. </param>
16. <param>
17. <name>portPrivateChat</name>
18. <value>41518</value>
19. </param>
20. <param>
21. <name>nickname</name>
22. <value>robbie</value>
23. </param>
24. <param>
25. <name>trayMsgUserLogged</name>
26. <value>true</value>
27. </param>
28. <param>
29. <name>trayMsgUserLoggedOff</name>
30. <value>false</value>
31. </param>
32. <param>
33. <name>trayMsgPrivateMsg</name>
34. <value>true</value>
35. </param>
36. <param>
37. <name>useNativeUI</name>
38. <value>true</value>
39. </param>
40. <param>
41. <name>startMinimized</name>
42. <value>false</value>
43. </param>
44. </config>
得到上述xml文档的Document对象的代码为
1. private Document getConfigDocument() throws Exception {
2. if (configDoc == null) {
3. File cfgFile = new File(filePath);
4. if (!cfgFile.exists()) {
5.
6. cfgFile.createNewFile();
7. try {
8. //FileInputStream fis = new FileInputStream(cfgFileOrig);
9. InputStream fis = getClass().getResourceAsStream("/com/dgtalize/netc/business/config.xml");
10. FileOutputStream fos = new FileOutputStream(cfgFile);
11. byte[] buf = new byte[1024];
12. int readCant = 0;
13. while ((readCant = fis.read(buf)) != -1) {
14. fos.write(buf, 0, readCant);
15. }
16. fis.close();
17. fos.close();
18. } catch (Exception ex) {
19. cfgFile.delete();
20. throw ex;
21. }
22. }
23.
24. SAXReader reader = new SAXReader();
25. configDoc = reader.read(new File(filePath));
26. configDoc.normalize();
27. }
28. return configDoc;
29. }
读取里面的参数(param)元素到变量的代码为:
1. public void readConfigFile() throws Exception {
2. configDoc = getConfigDocument();
3. Element rootElement = configDoc.getRootElement();
4. Iterator<Element> it = rootElement.elementIterator("param");
5. while (it.hasNext()) {
6. Element element = it.next();
7. String name = element.elementIterator("name").next().getTextTrim();
8. String value = element.elementIterator("value").next().getTextTrim();
9. if (name.equalsIgnoreCase("ipBroadcast")) {
10. ipBroadcast = value;
11. } else if (name.equalsIgnoreCase("portBroadcast")) {
12. portBroadcast = Integer.parseInt(value);
13. } else if (name.equalsIgnoreCase("nickname")) {
14. nickname = value == null ? "" : value;
15. } else if (name.equalsIgnoreCase("portPrivateChat")) {
16. portPrivateChat = Integer.parseInt(value);
17. } else if (name.equalsIgnoreCase("trayMsgUserLogged")) {
18. trayMsgUserLogged = Boolean.parseBoolean(value);
19. } else if (name.equalsIgnoreCase("trayMsgPrivateMsg")) {
20. trayMsgPrivateMsg = Boolean.parseBoolean(value);
21. } else if (name.equalsIgnoreCase("trayMsgUserLoggedOff")) {
22. trayMsgUserLoggedOff = Boolean.parseBoolean(value);
23. } else if (name.equalsIgnoreCase("useNativeUI")) {
24. useNativeUI = Boolean.parseBoolean(value);
25. } else if (name.equalsIgnoreCase("startMinimized")) {
26. startMinimized = Boolean.parseBoolean(value);
27. }
28. }
29.
30. }
根据里面的私有变量保存xml文件的代码为:
1. public void saveConfigFile() throws Exception {
2. Document configDocForSave = getConfigDocument();
3.
4. Element rootElement = configDocForSave.getRootElement();
5. Iterator<Element> it = rootElement.elementIterator("param");
6. while (it.hasNext()) {
7. Element element = it.next();
8. Element nextName = element.elementIterator("name").next();
9. String name = nextName.getTextTrim();
10. Element nextValue = element.elementIterator("value").next();
11. String value = nextValue.getTextTrim();
12. if (name.equalsIgnoreCase("ipBroadcast")) {
13. nextValue.setText(ipBroadcast);
14. } else if (name.equalsIgnoreCase("portBroadcast")) {
15. nextValue.setText(String.valueOf(portBroadcast));
16. } else if (name.equalsIgnoreCase("nickname")) {
17. nextValue.setText(nickname);
18. } else if (name.equalsIgnoreCase("portPrivateChat")) {
19. nextValue.setText(String.valueOf(portPrivateChat));
20. } else if (name.equalsIgnoreCase("trayMsgUserLogged")) {
21. nextValue.setText(String.valueOf(trayMsgUserLogged));
22. } else if (name.equalsIgnoreCase("trayMsgPrivateMsg")) {
23. nextValue.setText(String.valueOf(trayMsgPrivateMsg));
24. } else if (name.equalsIgnoreCase("trayMsgUserLoggedOff")) {
25. nextValue.setText(String.valueOf(trayMsgUserLoggedOff));
26. trayMsgUserLoggedOff = Boolean.parseBoolean(value);
27. } else if (name.equalsIgnoreCase("useNativeUI")) {
28. nextValue.setText(String.valueOf(useNativeUI));
29. } else if (name.equalsIgnoreCase("startMinimized")) {
30. nextValue.setText(String.valueOf(startMinimized));
31. }
32. }
33. XMLWriter writer = new XMLWriter(new FileWriter(filePath));
34. writer.write(configDocForSave);
35. writer.close();
36. }
分享到:
相关推荐
DOM是一种基于树形结构的XML处理方式,它将整个XML文档加载到内存中,形成一个完整的对象模型,允许开发者通过节点操作来访问和修改XML内容。而SAX则是一种基于事件的解析方法,它在读取XML时逐个处理元素,不会将...
在IT行业中,XML(eXtensible ...在提供的"XMLoperater"压缩包文件中,可能包含了一个或多个与XML操作相关的类或工具,用于演示DOM和SAX的使用方法。通过学习这些代码,我们可以进一步掌握这两种解析技术的实际应用。
本工程包“DOM SAX解析XML文档的范例”将帮助我们深入理解这两种解析方式。 **DOM解析:** DOM解析器将整个XML文档加载到内存中,创建一个树形结构,称为DOM树。每个XML元素、属性、文本节点等都有对应的DOM对象,...
DOM的核心在于它的树状结构,允许我们像遍历文件系统一样遍历和操作XML文档。 **XML DOM 节点** - **节点**:在DOM中,文档的每一个组成部分都被视为一个节点。这包括元素节点、属性节点、文本节点、注释节点等。...
例如,Java中的JAXB(Java Architecture for XML Binding)用于对象与XML之间的绑定,DOM4J提供DOM接口的增强,而Python的xml.etree.ElementTree是内置的XML处理模块。这些类库简化了XML处理,使得开发者无需关注...
在《HTML+XHTML+CSS+JavaScript+DOM+AJAX语法及范例实用辞典》这本书的附赠光盘中,包含了从"chapter1"到"chapter5"的全部网站源码,为读者提供了丰富的学习资源。 1. **HTML(HyperText Markup Language)**:HTML...
XMLDOM的相关知识,以及如何通过JavaScript XML DOM对象来读取XML文件的数据,并添加、修改、删除XML文件元素。同时,《JavaScript+DHTML语法与范例详解词典》还讲解AJAX技术的用法,AJAX的定义、语法、功能和执行...
DOM是一种编程接口,用于XML和HTML文档,它将整个文档构建成一棵树形结构,使得开发者可以方便地通过节点操作来访问和修改文档内容。 "2016112700moreData.html"可能进一步探讨了如何处理和展示XML中的大量数据,这...
本压缩包中的“C2的特效范例(XML格式)”提供了C2引擎专用的特效文件,这些文件采用XML格式,可以被C2引擎识别和执行,同时也能应用于基于JavaScript的网页游戏代码中。 XML(Extensible Markup Language)是一种...
为了更好地练习XML,向服务器接收到参数后,均用DOM的方式存入XML,数据的读取均用Xpath读取。然后以XML文件的形式返回。以下均已用户注册为例,来说明数据的处理: 1. 用户点击注册按钮,就会把系统生成的ID和用户...
在本教程中,我们将深入探讨XML的基本概念、语法和应用,同时结合实验指导,帮助学习者掌握XML的实际操作技能。 一、XML简介 XML起源于1998年W3C发布的标准,它的主要目标是简化数据共享和交换,特别是在不同的系统...
4. **XML Schema**:与DTD相比,XML Schema提供了更强大的数据类型和更复杂的结构约束。它使用XSD(XML Schema Definition)文件来定义文档结构。 5. **命名空间(Namespaces)**:在XML中,命名空间可以防止元素...
例如,`selectNodes`方法用于查询XML节点,`getElementsByTagName`用于获取具有特定标签的所有节点,`getAttribute`和`setAttribute`用于读取和设置属性值。 对于写入XML文件,你首先需要创建或修改所需的元素和...
LabVIEW提供了内置的XML VIs(Virtual Instruments),如“XML解析器”和“XML序列化器”,它们允许用户读取、写入和操作XML文档。 解析XML数据的过程通常包括以下几个步骤: 1. **加载XML文件**:首先,我们需要...
DOM将整个XML文档加载到内存,形成一棵可操作的节点树;SAX是事件驱动模型,逐行读取,适合处理大型XML文件;而StAX是基于流的解析,允许开发者以迭代方式处理XML。 XML还广泛应用于Web服务(如SOAP消息)、配置...
第四部分(XML高阶),内容包括:XML在数据库中的应用,XML中的矢量图形处理技术,WML——无线接入的XML,XML与Java;第五部分(基于XML的Web站点应用与开发),内容包括:WIDL自动控制Web站点,频道定义格式推送...
在本篇Qt编程范例之中高级篇(4)中,我们将深入探讨XML处理技术,这是在C++开发中,特别是使用Qt框架时一个非常重要的部分。XML(eXtensible Markup Language)是一种用于存储和传输数据的标准格式,因其灵活性和跨...
C#支持XML集成,可以方便地生成、解析和操作XML文档,同时,C#也提供了丰富的类库支持Web Services的开发,例如System.Web.Services命名空间,包含了一系列用于创建和消费Web Services的类。 在这个"XML+Web+...
总结来说,这个VBScript脚本提供了一个基本的范例,教导如何利用MSXML库和XPath在VBScript中读取XML文件并获取其中的特定信息。这对于任何需要从XML数据源提取数据的场景都非常有用,比如Web应用程序、自动化脚本...
libxml是一个开源的XML解析库,广泛应用于处理XML文档,它提供了丰富的API来读取、写入、验证和操作XML数据。 **描述解析:** 描述中提到“libxml的范例代码工程,visual studio 2008创建”,意味着这些代码是用...