一、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的更多相关文章

  1. 【Java】XML解析之DOM4J

    DOM4J介绍 dom4j是一个简单的开源库,用于处理XML. XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集成了DOM,SAX和JAXP,使用需要引用dom4j.jar包 ...

  2. 【Java】XML解析之JDOM

    JDOM介绍 JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析.生成.序列化以及多种操作.使用jdom需要引入jdom.jar包. XML生成及解析 代码如下: pac ...

  3. 【Java】XML解析之SAX

    SAX介绍 SAX(Simple API for XML)是一种事件驱动的流式XML文件处理方式,区别与DOM方式的是不需要在内存中建一棵DOM树,而是根据读取XML时遇到的标签事件来顺序处理,因此具 ...

  4. 【Java】XML解析之DOM

    DOM介绍 DOM(Document Object Model)解析是官方提供的XML解析方式之一,使用时无需引入第三方包,代码编写简单,方便修改树结构,但是由于DOM解析时是将整个XML文件加载到内 ...

  5. 【Java】XML文件的解析

    import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...

  6. 【Java】模拟Sping,实现其IOC和AOP核心(二)

    接着上一篇,在上一篇完成了有关IOC的注解实现,这一篇用XML的方式实现IOC,并且完成AOP. 简易的IOC框图 注解的方式实现了左边的分支,那么就剩下右边的XML分支: XmlContext:这个 ...

  7. 【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 ...

  8. 【Java】模拟Sping,实现其IOC和AOP核心(一)

    在这里我要实现的是Spring的IOC和AOP的核心,而且有关IOC的实现,注解+XML能混合使用! 参考资料: IOC:控制反转(Inversion of Control,缩写为IoC),是面向对象 ...

  9. 【Java】一台服务器配置多个Tomcat

    需求缘由 最近接收了一个新的工具业务:ipublish发布系统,刚接手这个业务的时候,发现每次发布新的代码 需要到群里告知大家,我要停服务几分钟,准备更新代码啦.这尼玛 哪个公司都不敢这么牛逼的和用户 ...

随机推荐

  1. PTA 堆栈操作合法性(20 分)

    7-1 堆栈操作合法性(20 分) 假设以S和X分别表示入栈和出栈操作.如果根据一个仅由S和X构成的序列,对一个空堆栈进行操作,相应操作均可行(如没有出现删除时栈空)且最后状态也是栈空,则称该序列是合 ...

  2. jqGrid API (转)

    来源:https://www.cnblogs.com/MonaSong/p/5109991.html JQGrid是一个在jquery基础上做的一个表格控件,以ajax的方式和服务器端通信. JQGr ...

  3. SpringBoot整合+logback日志配置

    本次演示的代码结构如下,基于maven,整合SpringBoot.Spring.Mybaits的SSM框架.同时测试logback日志框架的使用及配置. 1.创建maven工程,修改pom.xml文件 ...

  4. 后端调用接口在通过webService发布 解决跨域问题

    1.新建一个空的项目 2.添加一个WebService新项   asmx格式的 3.在这里面写方法  加上[WebMethod]标识 前端就可以调用 4.发布WebService  右键服务  添加服 ...

  5. 学习笔记29—Linux基础

    一.简单命令: 1.进入文件夹heyi目录:cd ./heyi 2.查看该目录下内容:ls 二.linux压缩和解压缩命令大全 tar命令 解包:tar zxvf FileName.tar 打包:ta ...

  6. d3选择全部子节点,不知道class和id

    https://github.com/d3/d3-selection/issues/63 selection.selectAll("*")

  7. Mac 如何安装 chromedriver

    1.使用brew  命令 前提是要安装 brew 这里不做介绍 使用命令 brew install chromedriver 如上图出现错误,根据提示可以使用如下命令安装 brew cask inst ...

  8. Java创建WebService

    从java 6之后就提供了简单快速的创建WebService的方法,这里将这种简单的方法记录下来方便以后回看.第一步:首先创建一个java Project,然后创建一个类HelloWorldImpl如 ...

  9. python中socket模块详解

    socket模块简介 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.socket通常被叫做"套接字",用于描述IP地址和端口,是一个通信 ...

  10. window如何安装redis服务、卸载redis服务和启动redis服务

    window如何安装redis服务.卸载redis服务和启动redis服务 一.总结 一句话总结:github上下载,解压,命令行运行(redis-server.exe redis.windows.c ...