【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发布系统,刚接手这个业务的时候,发现每次发布新的代码 需要到群里告知大家,我要停服务几分钟,准备更新代码啦.这尼玛 哪个公司都不敢这么牛逼的和用户 ...
随机推荐
- sublime配置 sublimecondeintel 分号后不要提示
https://github.com/SublimeCodeIntel/SublimeCodeIntel/issues/461 Thanks to @catgsmith ,I find a simil ...
- 操作 frames 框架下的 dom 内容。
2016-12-30 框架名: var obj=$(window.frames["wangpan"].document).find("a[menu=download_on ...
- 【译】第15节---数据注解-StringLength
原文:http://www.entityframeworktutorial.net/code-first/stringlength-dataannotations-attribute-in-code- ...
- Js 运行机制 (重点!!)
一.引子 本文介绍JavaScript运行机制,这一部分比较抽象,我们先从一道面试题入手: 这一题看似很简单,但如果你不了解JavaScript运行机制,很容易就答错了.题目的答案是依次输出1 2 3 ...
- springmvc后台接前端的参数,数组,集合,复杂对象等
springmvc后台接前端的参数,数组,集合,复杂对象等 参考地址:https://blog.csdn.net/feicongcong/article/details/54705933 常用的几种 ...
- 深入理解char * ,char ** ,char a[ ] ,char *a[]
1.数组的本质 数组是多个元素的集合,在内存中分布在地址相连的单元中,所以可以通过其下标访问不同单元的元素. 2.指针 指针也是一种变量,只不过它的内存单元中保存的是一个标识其他位置的地址.由于地址也 ...
- linux_nmon监控方法
一.介绍 Nmon 工具是 IBM 提供的免费的在AIX与各种Linux操作系统上广泛使用的监控与分析工具.该工具可将服务器的系统资源耗用情况收集起来并输出一个特定的文件,并可利用 excel 分析工 ...
- 为 10000+ 业务系统提供数据可视化能力的 AntV 又进化了
小蚂蚁说: 2018 年 AntV 品牌日以知新.知心为主题,旨在让产品一直「知新」,与用户一直「知心」.AntV 是蚂蚁金服全新一代数据可视化解决方案,致力于提供一套简单方便.专业可靠.无限可能的数 ...
- async、await在ASP.NET[ MVC]中之线程死锁的故事
场景重构 public ActionResult Index(string ucode) { string userInfo = GetUserInfo(ucode).Result; ViewData ...
- include
1. 自己写的文件都用:include "....." 2. 如果A类include了B,那么在主函数中,只用include A类,就可以使用B类了,但是此时不能再include ...