XML-dom4j实战

2024-09-06 09:38
文章标签 xml 实战 dom4j

本文主要是介绍XML-dom4j实战,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

dom4j是一个用来读取XML的工具包,它是采用DOM思想来读取的,也就是把XML组织成一个文档树,然后根据相应的节点来读取。

import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.Text;
import org.dom4j.io.SAXReader;
import org.junit.Test;/*** 编写DOM4J的工具类* @author Neuclil**/public class ReadUtils {@Testpublic void test(){File file = new File("./src/contact.xml");List<Contact> contacts = getContacts(file);Iterator<Contact> iterator = contacts.iterator();while(iterator.hasNext()){Contact contact = iterator.next();System.out.println(contact);}}public static Document readFile(File file){SAXReader saxReader = new SAXReader();Document doc = null;try {doc = saxReader.read(file);} catch (DocumentException e) {e.printStackTrace();}return doc;}//演示读取文档的节点信息的方法@Testpublic void test1(){File file = new File("./src/contact.xml");Document doc = readFile(file);Iterator<Node> iterator = doc.nodeIterator();while(iterator.hasNext()){Node node = iterator.next();System.out.println(node.getName());if(node instanceof Element){Element element = (Element)node;Iterator<Node> iterator2 = element.nodeIterator();while(iterator2.hasNext()){Node node2 = iterator2.next();System.out.println(node2.getName());}}}//得到的结果为contacts.}//遍历文档中的所有节点 包括 文本节点, 标签节点@Testpublic void test2(){File file = new File("./src/contact.xml");Document doc = readFile(file);Element rootElement = doc.getRootElement();StringBuffer sb = new StringBuffer();getChild(rootElement, sb);System.out.println(sb.toString());}private void getChild(Element element, StringBuffer sb){sb.append("<" + element.getName());List<Attribute> attrs = element.attributes();Iterator<Attribute> iterator = attrs.iterator();while(iterator.hasNext()){Attribute attr = iterator.next();sb.append(" "+attr.getName()+"="+"\""+attr.getValue()+"\"");}sb.append(">");Iterator<Node> nodeIt = element.nodeIterator();while(nodeIt.hasNext()){Node node = nodeIt.next();if(node instanceof Element){getChild((Element)node, sb);}if(node instanceof Text){Text text = (Text)node;sb.append(text.getText());}}sb.append("</"+element.getName()+">");}//该方法演示得到子标签 的方法@Testpublic void test3(){File file = new File("./src/contact.xml");Document doc = readFile(file);Element rootElement = doc.getRootElement();//得到指定名字的第一个元素
//		Element element = rootElement.element("contact");
//		System.out.println(element.getName());
//		
//		System.out.println("-----------------------------");//得到指定名字的所有元素
//		Iterator<Element> iterator = rootElement.elementIterator("contact");
//		while(iterator.hasNext()){
//			Element element2 = iterator.next();
//			System.out.println(element2.getName());
//		}//得到所有的子元素List<Element> elements = rootElement.elements();Iterator<Element> iterator = elements.iterator();while(iterator.hasNext()){Element element = iterator.next();System.out.println(element.getName());}}public static List<Contact> getContacts(File file){Document doc = readFile(file);Element rootElement = doc.getRootElement();List<Contact> contacts = new ArrayList<Contact>();Iterator<Element> iterator = rootElement.elementIterator("contact");while(iterator.hasNext()){Contact contact = new Contact();Element element = iterator.next();contact.setId(element.attributeValue("id"));contact.setName(element.elementText("name"));contact.setAge(element.elementText("age"));contact.setPhone(element.elementText("phone"));contact.setEmail(element.elementText("email"));contact.setQq(element.elementText("qq"));contacts.add(contact);}return contacts;}
}

其中contact.xml如下

<?xml version="1.0" encoding="utf-8"?>
<contactList><contact id="001"><name>张三</name><age>20</age><phone>134222223333</phone><email>zhangsan@qq.com</email><qq>432221111</qq></contact><contact id="002"><name>李四</name><age>20</age><phone>134222225555</phone><email>lisi@qq.com</email><qq>432222222</qq></contact>
</contactList>


这篇关于XML-dom4j实战的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1141666

相关文章

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We

Spring Boot 整合 SSE(Server-Sent Events)实战案例(全网最全)

《SpringBoot整合SSE(Server-SentEvents)实战案例(全网最全)》本文通过实战案例讲解SpringBoot整合SSE技术,涵盖实现原理、代码配置、异常处理及前端交互,... 目录Spring Boot 整合 SSE(Server-Sent Events)1、简述SSE与其他技术的对

MyBatis-Plus 与 Spring Boot 集成原理实战示例

《MyBatis-Plus与SpringBoot集成原理实战示例》MyBatis-Plus通过自动配置与核心组件集成SpringBoot实现零配置,提供分页、逻辑删除等插件化功能,增强MyBa... 目录 一、MyBATis-Plus 简介 二、集成方式(Spring Boot)1. 引入依赖 三、核心机制

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

MySQL 数据库表与查询操作实战案例

《MySQL数据库表与查询操作实战案例》本文将通过实际案例,详细介绍MySQL中数据库表的设计、数据插入以及常用的查询操作,帮助初学者快速上手,感兴趣的朋友跟随小编一起看看吧... 目录mysql 数据库表操作与查询实战案例项目一:产品相关数据库设计与创建一、数据库及表结构设计二、数据库与表的创建项目二:员

从基础到高阶详解Python多态实战应用指南

《从基础到高阶详解Python多态实战应用指南》这篇文章主要从基础到高阶为大家详细介绍Python中多态的相关应用与技巧,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、多态的本质:python的“鸭子类型”哲学二、多态的三大实战场景场景1:数据处理管道——统一处理不同数据格式

MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

《MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)》本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或... 目录完整 Hutool 写法版本对比优化为什么status变成Long?为什么 price 没事?怎

Java慢查询排查与性能调优完整实战指南

《Java慢查询排查与性能调优完整实战指南》Java调优是一个广泛的话题,它涵盖了代码优化、内存管理、并发处理等多个方面,:本文主要介绍Java慢查询排查与性能调优的相关资料,文中通过代码介绍的非... 目录1. 事故全景:从告警到定位1.1 事故时间线1.2 关键指标异常1.3 排查工具链2. 深度剖析: