JAVA对XML文件的读写
XML 指可扩展标记语言(EXtensible Markup Language),是独立于软件和硬件的信息传输工具,应用于 web 开发的许多方面,常用于简化数据的存储和共享。
xml指令
处理指令,简称PI (processing instruction)。处理指令用来指挥解析引擎如何解析XML文档内容。
以下为例:
在XML中,所有的处理指令都以结束。<?后面紧跟的是处理指令的名称。
XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。
XML 元素可以在开始标签中包含属性,属性 (Attribute) 提供关于元素的额外(附加)信息。属性通常提供不属于数据组成部分的信息,但是对
需要处理这个元素的应用程序来说却很重要。
XML 属性必须加引号,属性值必须被引号包围,不过单引号和双引号均可使用。
如果属性值本身包含双引号,那么有必要使用单引号包围它,或者可以使用实体引用。
首先要有一个xml文件为名字为emplist.xml内容如下
<?xml version="1.0" encoding="UTF-8"?> <list> <emp id=""> <name>张三</name> <age></age> <gender>男</gender> <salary>5000</salary> </emp> </list>
XML解析方式
SAX解析方式
SAX(simple API for XML)是一种XML解析的替代方法。相比于DOM,SAX是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。而且相比于DOM,SAX可以在解析文档的任意时刻停止解析。 其优缺点分别为:
优点: 解析可以立即开始,速度快,没有内存压力
缺点: 不能对节点做修改
DOM解析方式
DOM:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式。DOM解析器在解析XML文档时,会把文档中
的所有元素,按照其出现的层次关系,解析成一个个Node对象(节点)。其优缺点分别为:
优点:把xml文件在内存中构造树形结构,可以遍历和修改节点
缺点: 如果文件比较大,内存有压力,解析的时间会比较长
SAXReader读取xml
使用SAXReader需要导入dom4j-full.jar包。其是DOM4J的一个核心API,用于读取XML文档。
DOM4J是一个Java的XML API,类似于JDOM,用来读写XML文件的。DOM4J是一个非常非常优秀的Java XML API,具有性能优异、功能强
大和极端易用使用的特点,同时它也是一个开放源代码的软件。
package day12; import java.io.File; import java.util.ArrayList; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; /** * 使用DOM解析xml文档 * @author ylg * */ public class ParseXmlDemo { public static void main(String[] args) { try { /* * 解析XML大致流程 * 1:创建SAXReader * 2:使用SAXReader读取数据源(xml文档信息) * 并生成一个Document对象,该对象即表示 * xml文档内容。DOM耗时耗内存资源也是在 * 这一步体现的。因为会对整个XML文档进行 * 读取并载入内存。 * 3:通过Document对象获取根元素 * 4:根据XML文档结构从根元素开始逐层获取 * 子元素最终以达到遍历XML文档内容的目的 * */ //1 SAXReader reader = new SAXReader(); //2 Document doc = reader.read(new File("emplist.xml")); /* * 3 * Document提供了方法: * Element getRootElement() * 该方法是用来获取XML文档中的根元素, * 对于emplist.xml文档而言,根元素就是 * <list>标签。 * * Element类 * 每一个Element实例都可以表示XML文档中的 * 一个元素,即:一对标签。 */ Element root = doc.getRootElement(); /* * Element提供了方法: * String getName() * 该方法可以获取当前元素的名字(标签名) */ System.out.println( "获取了根元素:"+root.getName() ); //4 /* * 获取一个元素中的子元素 * Element提供了相关方法: * * 1 * Element element(String name) * 获取当前元素下指定名字的子元素。 * * 2: * List elements() * 获取当前元素下所有子元素 * * 3: * List elements(String name) * 获取当前元素下所有同名子元素 * * 2,3返回的集合中的每一个元素都是Element * 的实例,每个实例表示其中的一个子元素。 * */ //获取所有emp标签 List<Element> list = root.elements(); //用于保存所有员工信息的List集合 List<Emp> empList = new ArrayList<Emp>(); for(Element empEle : list){ // System.out.println(empEle.getName()); //获取员工名字 Element nameEle = empEle.element("name"); /* * Element还提供了获取当前元素中文本的方法: * String getText(),String getTextTrim() */ String name = nameEle.getText(); System.out.println("name:"+name); //获取员工年龄 int age = Integer.parseInt( empEle.elementText("age") ); //获取性别 String gender = empEle.elementText("gender"); //获取工资 int salary = Integer.parseInt( empEle.elementText("salary") ); /* * Attribute attribute(String name) * 获取当前元素(标签)中指定名字的属性 * * Attribute的每一个实例用于表示一个 * 属性。其中常用方法: * String getName():获取属性名 * String getValue():获取属性值 */ Attribute attr = empEle.attribute("id"); int id = Integer.parseInt( attr.getValue() ); Emp emp = new Emp(id,name,age,gender,salary); empList.add(emp); } System.out.println("解析完毕!"); for(Emp emp : empList){ System.out.println(emp); } } catch (Exception e) { e.printStackTrace(); } } }
写XML
构建Document对象
使用DOM4J我们还可以通过自行构建Document对象,并组建树状结构来描述一个XML文档,并使用DOM4J将其写入一个文件。
import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; /** * 使用DOM生成XML文档 * @author ylg * */ public class WriteXmlDemo { public static void main(String[] args) { List<Emp> list = new ArrayList<Emp>(); list.add(new Emp(1,"张三",25,"男",5000)); list.add(new Emp(2,"李四",26,"女",6000)); list.add(new Emp(3,"王五",27,"男",7000)); list.add(new Emp(4,"赵六",28,"女",8000)); list.add(new Emp(5,"钱七",29,"男",9000)); /* * 使用DOM生成XML文档的大致步骤: * 1:创建一个Document对象表示一个空文档 * 2:向Document中添加根元素 * 3:按照文档应有的结构从根元素开始顺序添加 * 子元素来形成该文档结构。 * 4:创建XmlWriter对象 * 5:将Document对象写出 * 若写入到文件中则形成一个xml文件 * 也可以写出到网络中作为传输数据使用 */ //1 Document doc = DocumentHelper.createDocument(); /* * 2 * Document提供了添加根元素的方法: * Element addElement(String name) * 向当前文档中添加指定名字的根元素,返回 * 的Element就表示这个根元素。 * 需要注意,该方法只能调用一次,因为一个 * 文档只能有一个根元素。 */ Element root = doc.addElement("list"); //3 for(Emp emp : list){ /* * Element也提供了追加子元素的方法: * Element addElement(String name) * 调用次数没有限制,元素可以包含若干 * 子元素。 */ Element empEle = root.addElement("emp"); //添加name信息 Element nameEle = empEle.addElement("name"); nameEle.addText(emp.getName()); //添加age信息 Element ageEle = empEle.addElement("age"); ageEle.addText(emp.getAge()+""); //添加gender信息 Element genderEle = empEle.addElement("gender"); genderEle.addText(emp.getGender()); //添加salary信息 Element salEle = empEle.addElement("salary"); salEle.addText(emp.getSalary()+""); /* * 向当前元素中添加指定名字以及对应值的属性 */ empEle.addAttribute("id", emp.getId()+""); } try{ //4 XMLWriter writer = new XMLWriter(OutputFormat.createPrettyPrint()); FileOutputStream fos = new FileOutputStream("myemp.xml"); writer.setOutputStream(fos); //5 writer.write(doc); System.out.println("写出完毕!"); writer.close(); }catch(Exception e){ e.printStackTrace(); } } }
注意事项:
XPath 路径表达式
XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。由于我们单纯使用dom定位节点时,大部
分时间需要一层一层的处理,如果有了xPath,我们定位我们的节点将变得很轻松。他可以根据路径,属性,甚至是条件进行节点的检索。
XPath 使用路径表达式在XML 文档中进行导航
XPath 包含一个标准函数库
XPath 是 XSLT 中的主要元素
XPath 是一个 W3C 标准
路径表达式语法:
斜杠(/)作为路径内部的分割符。
同一个节点有绝对路径和相对路径两种写法:
路径(absolute path)必须用"/"起首,后面紧跟根节点,比如/step/step/...。
相对路径(relative path)则是除了绝对路径以外的其他写法,比如 step/step, 也就是不使用"/"起首。
"."表示当前节点。
".."表示当前节点的父节点
nodename(节点名称):表示选择该节点的所有子节点
"/":表示选择根节点
"//":表示选择任意位置的某个节点
"@": 表示选择某个属性
JAVA对XML文件的读写的更多相关文章
- JAVA对XML文件的读写(有具体的代码和解析
XML 指可扩展标记语言(EXtensible Markup Language),是独立于软件和硬件的信息传输工具,应用于 web 开发的许多方面,常用于简化数据的存储和共享. xml指令 处理指令, ...
- # java对xml文件的基本操作
下面是简单的总结三种常用的java对xml文件的操作 1. dom方式对xml进行操作,这种操作原理是将整个xml文档读入内存总,在内存中进行操作,当xml文档非常庞大的时候就会出现内存溢出的异常,这 ...
- 用java操作XML文件(DOM解析方式)
XML 可扩展标记语言(Extensible Markup Language),是独立于软件和硬件的传输工具. XML的作用: (1)用作配置文件 (2)简化数据共享 (3)简化数据传输 XML DO ...
- java对xml文件做增删改查------摘录
java对xml文件做增删改查 package com.wss; import java.io.File;import java.util.ArrayList;import java.util.Lis ...
- 更新java对xml文件的操作
//更新java在xml文件中操作的内容 public static void upda(Document doc) throws Exception{ //创建一个TransformerFactor ...
- Java操作xml文件
Bbsxml.java public class Bbsxml { private String imgsrc; private String title; private String url; p ...
- java 读取XML文件作为配置文件
首先,贴上自己的实例: XML文件:NewFile.xml(该文件与src目录同级) <?xml version="1.0" encoding="UTF-8&quo ...
- java读XML文件
XML文件设计为传输和存储数据,其焦点为数据内容. HTML设计为用来显示数据, 其焦点为数据外观. XML仅仅是文本文件,任何文本编辑器一般情况下都能对其进行编辑. XML没有预定义的标签,并且设定 ...
- java读取xml文件报“org.xml.sax.SAXParseException: Premature end of file” .
背景:java读取xml文件,xml文件内容只有“<?xml version="1.0" encoding="UTF-8"?>”一行 java读取该 ...
随机推荐
- 【阅读SpringMVC源码】手把手带你debug验证SpringMVC执行流程
✿ 阅读源码思路: 先跳过非重点,深入每个方法,进入的时候可以把整个可以理一下方法的执行步骤理一下,也可以,理到某一步,继续深入,回来后,接着理清除下面的步骤. ✿ 阅读本文的准备工作,预习一下Spr ...
- laravel7 数据迁移及填充数据
1:置迁移数据表,创建生成模型和迁移文件: php artisan make:model Article -m 2:接着,在框架中的database/migrations文件夹中找到刚创建的用户表Ar ...
- NSView subview blocking drag/drop event
原文链接 近期在Mac项目中有一个处理鼠标拖拽事件的需求, 大致处理流程是这样的: 从 NSView 继承得到一个子类 覆盖处理拖拽事件相关方法 注册拖拽事件 开始的时候一切都很正常,直到某次发现拖拽 ...
- 手绘流程图,教你WSL2与Docker容器无缝互相迁移
摘要:本文主要介绍WSL2与Docker容器无缝迁移镜像. 本文分享自华为云社区<WSL2与Docker容器,无缝互相迁移>,作者: tsjsdbd . 注:本文提到的WSL都是指WSL2 ...
- 《手把手教你》系列基础篇(七十六)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 下篇(详解教程)
1.简介 今天这一篇宏哥主要是结合实际工作中将遇到的测试场景和前边两篇学习的知识结合起来给大家讲解和分享一下,希望以后大家在以后遇到其他的测试场景也可以将自己的所学的知识应用到测试场景中. 2.测试场 ...
- LGP4463题解
这玩意儿怎么看上去就很经典啊( 哦互不相同啊,那没事了( 考虑一个 \(\rm DP\).由于限制了互不相同,那么我们考虑从值域开始想. 设 \(dp_{n,k}\) 为在 \([1,n]\) 中选了 ...
- Flask Web开发读书笔记
开篇:目前想自学Flask Web开发--基于Python,找了几本书准备啃啃,同时也会分享读书笔记.希望和大家一起进步. Flask是小型框架,可以算是微框架,但是他的功能还是比较多 Flask有三 ...
- 前端经典面试题vue面试题
1.什么是MVVM? MVVM是一种设计思想. Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑: View 代表UI 组件,它负责将数据模型转化成UI 展现出来,View ...
- Docker重要容器命令
镜像下载.域名解析.时间同步请点击 阿里云开源镜像站 容器重要命令 启动守护式容器 docker run -d 镜像 docker run -d image [command][arg...] 使用c ...
- Oracle视图、存过、包、方法赋予/收回权限给用户
oracle给某用户授权/回收视图查询 赋权: grant select on $_view to $_user; 这样 $_user用户就拥有了查询$_view视图的权限了 回收: revoke s ...