【Java】XML
一、XML
XML(Extensible Markup Language),可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言。
格式:
<?xml version="1.0" encoding="UTF-8"?> <users>
<user id="1">
<username>Wayne</username>
<password>123</password>
</user>
<user id="2">
<username>Edwin</username>
<password>234</password>
</user>
</users>
二、DOM4J
DOM4J是一个非常优秀的Java XML API,具有性能优异、功能强大和易用的特点,同时它也是一个开放源代码的软件,Java中生成和解析XML文档常常使用DOM4J。
1. 从XML读数据
// 获取 xml 包中的 users.xml
SAXReader reader = new SAXReader();
Document doc = reader.read(类名.class.getClassLoader().getResource("xml/users.xml"));
// 获取根元素
Element root = doc.getRootElement();
PS:
获取类路径下的文件可以通过 “类名.class.getClassLoader().getResource(文件名);” 或 “类名.class.getClassLoader().getResourceAsStream(文件名);”实现。
区别是 getResource 获取文件的绝对URL,getResourceAsStream 返回 InputStream。
// 获取根元素的所有名为“user”的子节点
List<Element> elements = root.elements("user");
// attributeValue("id") - 获取属性为id的值
/**elementText(子节点名) - 获取某个子节点中的文本值
(不包括节点,若只有节点,则返回一组空字符串)**/
for (Element e : elements) {
System.out.println("[" + e.attributeValue("id") + "] " + e.elementText("username") + " - " + e.elementText("password"));
}
使用XPath表达式获取节点元素(一般用于指定条件查询)
/* 相对路径查找,从当前节点查找子节点book */
List<Element> elements = root.selectNodes("book");
/* 绝对路径查找 */
List<Element> elements = root.selectNodes("/books/book/title");
/* 遍历所有满足要求的节点 */
List<Element> elements = root.selectNodes("//book");
/* 使用 [] 填写筛选子节点的条件判断 */
List<Element> elements = root.selectNodes("/books/book[author='Wayne']");
/* 筛选属性时要加 @ */
List<Element> elements = root.selectNodes("/books/book[@id >= 2]/title");
/* 筛选条件可使用 contains 函数,and 操作符等 */
List<Element> elements = root.selectNodes("/books/book[contains(title,'Java') and price > 80]/price");
2. 向XML写数据
向XML中写入对象代码:
// 将 List<Person> 写入 XML
private static void writePersons2XML(List<Person> persons) {
XMLWriter out = null;
try {
// 写数据首先创建 Document 对象
Document d = DocumentHelper.createDocument();
Element root = null, e_person = null;
if ((root = d.getRootElement()) == null) {
root = d.addElement("persons");
}
for (Person p : persons) {
e_person = root.addElement("person");
e_person.addAttribute("age", String.valueOf(p.getAge()));
e_person.addElement("name").addText(p.getName());
e_person.addElement("sex").addText(p.getSex());
e_person.addElement("idcard").addText(p.getIdcard());
}
String path = WriteToXML.class.getClassLoader().getResource("xml/persons.xml").getPath();
// out.write(d)只会写入/bin/目录下的xml,而不会写入/src/下。src下改变则bin改变,但bin改变src不会改变。所以学习时通过这种暴力方法写入src的xml
path = path.replace("bin", "src");
out = new XMLWriter(new FileWriter(path), OutputFormat.createPrettyPrint());
out.write(d);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (out != null) out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
【Java】XML的更多相关文章
- 【Java】XML解析之DOM4J
DOM4J介绍 dom4j是一个简单的开源库,用于处理XML. XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集成了DOM,SAX和JAXP,使用需要引用dom4j.jar包 ...
- 【Java】XML解析之JDOM
JDOM介绍 JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析.生成.序列化以及多种操作.使用jdom需要引入jdom.jar包. XML生成及解析 代码如下: pac ...
- 【Java】XML解析之SAX
SAX介绍 SAX(Simple API for XML)是一种事件驱动的流式XML文件处理方式,区别与DOM方式的是不需要在内存中建一棵DOM树,而是根据读取XML时遇到的标签事件来顺序处理,因此具 ...
- 【Java】XML解析之DOM
DOM介绍 DOM(Document Object Model)解析是官方提供的XML解析方式之一,使用时无需引入第三方包,代码编写简单,方便修改树结构,但是由于DOM解析时是将整个XML文件加载到内 ...
- 【Java】XML文件的解析
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...
- 【Java】模拟Sping,实现其IOC和AOP核心(二)
接着上一篇,在上一篇完成了有关IOC的注解实现,这一篇用XML的方式实现IOC,并且完成AOP. 简易的IOC框图 注解的方式实现了左边的分支,那么就剩下右边的XML分支: XmlContext:这个 ...
- 【Java】NO.83.Tool.1.GlassFish.1.001-【GlassFish 5 安装使用】-
1.0.0 Summary Tittle:[Java]NO.83.Tool.1.GlassFish.1.001-[GlassFish 5 安装使用]- Style:EBook Series:Java ...
- 【Java】模拟Sping,实现其IOC和AOP核心(一)
在这里我要实现的是Spring的IOC和AOP的核心,而且有关IOC的实现,注解+XML能混合使用! 参考资料: IOC:控制反转(Inversion of Control,缩写为IoC),是面向对象 ...
- 【Java】一台服务器配置多个Tomcat
需求缘由 最近接收了一个新的工具业务:ipublish发布系统,刚接手这个业务的时候,发现每次发布新的代码 需要到群里告知大家,我要停服务几分钟,准备更新代码啦.这尼玛 哪个公司都不敢这么牛逼的和用户 ...
随机推荐
- PTA 堆栈操作合法性(20 分)
7-1 堆栈操作合法性(20 分) 假设以S和X分别表示入栈和出栈操作.如果根据一个仅由S和X构成的序列,对一个空堆栈进行操作,相应操作均可行(如没有出现删除时栈空)且最后状态也是栈空,则称该序列是合 ...
- jqGrid API (转)
来源:https://www.cnblogs.com/MonaSong/p/5109991.html JQGrid是一个在jquery基础上做的一个表格控件,以ajax的方式和服务器端通信. JQGr ...
- SpringBoot整合+logback日志配置
本次演示的代码结构如下,基于maven,整合SpringBoot.Spring.Mybaits的SSM框架.同时测试logback日志框架的使用及配置. 1.创建maven工程,修改pom.xml文件 ...
- 后端调用接口在通过webService发布 解决跨域问题
1.新建一个空的项目 2.添加一个WebService新项 asmx格式的 3.在这里面写方法 加上[WebMethod]标识 前端就可以调用 4.发布WebService 右键服务 添加服 ...
- 学习笔记29—Linux基础
一.简单命令: 1.进入文件夹heyi目录:cd ./heyi 2.查看该目录下内容:ls 二.linux压缩和解压缩命令大全 tar命令 解包:tar zxvf FileName.tar 打包:ta ...
- d3选择全部子节点,不知道class和id
https://github.com/d3/d3-selection/issues/63 selection.selectAll("*")
- Mac 如何安装 chromedriver
1.使用brew 命令 前提是要安装 brew 这里不做介绍 使用命令 brew install chromedriver 如上图出现错误,根据提示可以使用如下命令安装 brew cask inst ...
- Java创建WebService
从java 6之后就提供了简单快速的创建WebService的方法,这里将这种简单的方法记录下来方便以后回看.第一步:首先创建一个java Project,然后创建一个类HelloWorldImpl如 ...
- python中socket模块详解
socket模块简介 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.socket通常被叫做"套接字",用于描述IP地址和端口,是一个通信 ...
- window如何安装redis服务、卸载redis服务和启动redis服务
window如何安装redis服务.卸载redis服务和启动redis服务 一.总结 一句话总结:github上下载,解压,命令行运行(redis-server.exe redis.windows.c ...