目录

  • java基础之XML

    • 1. XML解析概述
    • 2. DOM4J介绍
      • 2.1 常用包
      • 2.2 内置元素
      • 2.2 Element类
      • 2.3 Attribute类
      • 2.4 常用操作
    • 3. 代码演示
      • 3.1 DOM4J读取xml文件
      • 3.2 DOM4J创建xml文件
      • 3.2 DOM4J修改xml文件

java基础之XML

XML是一种通用的数据交换格式,它的平台无关性、语言无关性、系统无关性、给数据集成与交互带来了极大的方便。本篇文章重点介绍DOM4J对XML文件的一些操作。

1. XML解析概述

  常见解析方式和解析器

  1. DOM:要求解析器把整个XML文档装载到内存,并解析成一个Document对象。
    优点:元素与元素之间保留结构关系,故可以进行增删改查操作。
    缺点:XML文档过大,可能出现内存溢出显现。
  2. SAX:是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。并以事件驱动的方式进行具体解析,每执行一行,都将触发对应的事件。
    优点:处理速度快,可以处理大文件
    缺点:只能读,逐行后将释放资源。

2. DOM4J介绍

2.1 常用包

包名 作用
import org.dom4j.Document; Document文档类
import org.dom4j.Element 元素节点类
import org.dom4j.QName; 一个对元素名字的封装类
import org.dom4j.io.SAXReader; sax读取类
import org.dom4j.io.XMLWriter xml写入类
import org.dom4j.io.OutputFormat 输出格式

2.2 内置元素

元素 含义
Attribute 定义了 XML 的属性。
Branch 指能够包含子节点的节点。如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为
CDATA 定义了 XML CDATA 区域
CharacterData 是一个标识接口,标识基于字符的节点。如CDATA,Comment, Text.
Comment 定义了 XML 注释的行为
Document 定义了XML 文档
DocumentType 定义 XML DOCTYPE 声明
Element 定义XML 元素
ElementHandler 定义了Element 对象的处理器
ElementPath 被 ElementHandler 使用,用于取得当前正在处理的路径层次信息
Entity 定义 XML entity
Node 为dom4j中所有的XML节点定义了多态行为
NodeFilter 定义了在dom4j 节点中产生的一个滤镜或谓词的行为(predicate)
ProcessingInstruction 定义 XML 处理指令
Text 定义 XML 文本节点
Visitor 用于实现 Visitor模式
XPath 在分析一个字符串后会提供一个 XPath 表达式

2.2 Element类

方法 含义
getQName() 元素的QName对象
getNamespace() 元素所属的Namespace对象
getNamespacePrefix() 元素所属的Namespace对象的prefix
getNamespaceURI() 元素所属的Namespace对象的URI
getName() 元素的local name
getQualifiedName() 元素的qualified name
getText() 元素所含有的text内容,如果内容为空则返回一个空字符串而不是null
getTextTrim() 元素所含有的text内容,其中连续的空格被转化为单个空格,该方法不会返回null
attributeIterator() 元素属性的iterator,其中每个元素都是

2.3 Attribute类

方法 含义
attributeValue() 元素的某个指定属性所含的值
elementIterator() 元素的子元素的iterator,其中每个元素都是Element对象
element() 元素的某个指定(qualified name或者local name)的子元素
elementText() 元素的某个指定(qualified name或者local name)的子元素中的text信息
getParent() 元素的父元素
getPath() 元素的XPath表达式,其中父元素的qualified name和子元素的qualified name之间使用”/”分隔
isTextOnly() 是否该元素只含有text或是空元素
isRootElement() 是否该元素是XML树的根节点

2.4 常用操作

  • 读取xml文件,获得document对象.
SAXReader reader = new SAXReader();
Document  document = reader.read(new File("***.xml"));
  • 解析XML形式的文本,得到document对象.
String text = "<members></members>";
Document document = DocumentHelper.parseText(text);
  • 获取根节点
Element root = dom.getRootElement();
  • 取得某节点的单个子节点
Element memberElm=root.element("title");
  • 获取节点文字
String text=memberElm.getText();
  • 取得某节点下名为"title"所有字节点并进行遍历
List list = rootElm.elements("member");
Iterator<Element> it = list.iterator();
while(it.hasNext()){Element elm = it.next();// do something...
}
  • 在某节点下添加子节点.
Element ageElm = newMemberElm.addElement("age");
  • 设置节点文字.
ageElm.setText("29");
  • 删除某节点.
parentElm.remove(childElm);
  • 取得某节点下的某属性
    Element root=document.getRootElement();    Attribute attribute=root.attribute("id");
  • 设置某节点的属性和文字.
newMemberElm.addAttribute("name", "sitinspring");
  • 设置属性的文字
Attribute attribute=root.attribute("name");
attribute.setText("sitinspring");
  • 删除某属性
Attribute attribute=root.attribute("size");// 属性名name
root.remove(attribute);

3. 代码演示

3.1 DOM4J读取xml文件

  test.xml

<?xml version="1.0" encoding="UTF-8"?>
<bookstore><book id="1"><title>巴黎圣母院</title><author>雨果</author></book><book id="2"><title>飘</title><author>米切尔</author></book>
</bookstore>

  1. 使用List列表解析xml

import java.io.File;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;public class XmlDemo {public static void main(String[] args) throws Exception {SAXReader reader = new SAXReader();File file = new File("test.xml");Document document = reader.read(file);Element root = document.getRootElement();List<Element> childElements = root.elements();for (Element child : childElements) {//已知属性名情况下System.out.println("--->id: " + child.attributeValue("id"));System.out.println("title:" + child.elementText("title"));System.out.println("author:" + child.elementText("author"));//未知属性名情况下/*List<Attribute> attributeList = child.attributes();for (Attribute attr : attributeList) {System.out.println(attr.getName() + ": " + attr.getValue());}List<Element> elementList = child.elements();for (Element ele : elementList) {System.out.println(ele.getName() + ": " + ele.getText());}System.out.println();*/}}
}
//输出结果:
--->id: 1
title:巴黎圣母院
author:雨果
--->id: 2
title:飘
author:米切尔

  2. 使用Iterator解析xml

public class XmlDemo {public static void main(String[] args) throws Exception {SAXReader reader = new SAXReader();Document document = reader.read(new File("test.xml"));Element root = document.getRootElement();Iterator<Element> it = root.elementIterator();while (it.hasNext()) {Element element = it.next();//未知属性名称情况下Iterator<Element> attrIt = element.attributeIterator();while (attrIt.hasNext()) {Attribute a  = (Attribute) attrIt.next();System.out.println(a.getValue());}Iterator<Element> eleIt = element.elementIterator();while (eleIt.hasNext()) {Element e =  eleIt.next();System.out.println(e.getName() + ": " + e.getText());}System.out.println();//已知元素名情况下  /*System.out.println("id: " + element.attributeValue("id"));System.out.println("title: " + element.elementText("title"));System.out.println("author: " + element.elementText("author"));System.out.println();*/}}
}
//输出结果:
id: 1
title:巴黎圣母院
author:雨果id: 2
title:飘
author:米切尔

3.2 DOM4J创建xml文件

public class XmlDemo {public static void main(String[] args) throws Exception {Document doc = DocumentHelper.createDocument();//增加根节点Element books = doc.addElement("bookstore");//增加子元素Element book1 = books.addElement("book");Element title1 = book1.addElement("title");Element author1 = book1.addElement("author");Element book2 = books.addElement("book");Element title2 = book2.addElement("title");Element author2 = book2.addElement("author");//为子节点添加属性book1.addAttribute("id", "3");//为元素添加内容title1.setText("战争与和平");author1.setText("列夫托尔斯泰");book2.addAttribute("id", "4");title2.setText("红楼梦");author2.setText("曹雪芹");//实例化输出格式对象OutputFormat format = OutputFormat.createPrettyPrint();//设置输出编码format.setEncoding("UTF-8");//创建需要写入的File对象File file = new File("test2.xml");//生成XMLWriter对象,构造函数中的参数为需要输出的文件流和格式XMLWriter writer = new XMLWriter(new FileOutputStream(file), format);//开始写入,write方法中包含上面创建的Document对象writer.write(doc);}
}

  运行结果(项目根目录下):

<?xml version="1.0" encoding="UTF-8"?><bookstore><book id="3"><title>战争与和平</title><author>列夫托尔斯泰</author></book><book id="4"><title>红楼梦</title><author>曹雪芹</author></book>
</bookstore>

3.2 DOM4J修改xml文件

public class XmlDeml {public static void main(String[] args) throws Exception {SAXReader reader = new SAXReader();File file = new File("test.xml");Document document = reader.read(file);Element root = document.getRootElement();Element nameElement = root.element("book").element("author");nameElement.setText("鲁迅");//写回XML文档OutputFormat format = OutputFormat.createPrettyPrint();XMLWriter writer = new XMLWriter(new FileOutputStream("test.xml"), format);writer.write(document);writer.close();}
}

  运行结果(项目根目录下):

<?xml version="1.0" encoding="UTF-8"?><bookstore> <book id="1"> <title>巴黎圣母院</title>  <author>鲁迅</author> </book>
</bookstore>

转载于:https://www.cnblogs.com/huizhipeng/p/10100113.html

java基础之XML相关推荐

  1. 小汤学编程之JAVA基础day14——xml和反射

    一.xml 1.简介     2.特点     3.使用步骤 二.Reflect反射 1.概念     2.理解Class类     3.反射的功能     4.两个案例 一.xml 1.简介 xml ...

  2. Java基础加强重温_13:XML(可拓展标记语言)、XML语法、XML约束、XML解析(Dom4j,JAXP)、Dom4j基本使用、Xpath表达式(XML路径语言)、XML解析综合案例

    摘要 Java基础加强重温_13: XML(可拓展标记语言.作用:小型数据库.框架配置文件.不同平台数据交换). XML语法(文档.标签/元素.属性.注释.转义字符.CDTA区) XML约束(DTD约 ...

  3. 我的面试标准:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架!...

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:hsm_computer www.cnblogs.com/J ...

  4. [Spring 深度解析]第1章 Java基础

    第1章 ◄Java基础► 在学习Spring之前我们需要对Java基础语法有一定的了解,Java中最重要的两个知识点是注解和反射.注解和反射在Spring框架中应用的最广泛.掌握注解和反射,有助于后面 ...

  5. 给Java新手的一些建议——Java知识点归纳(Java基础部分)

    写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行当的准新手们,希望可以给 ...

  6. Java基础、多线程、JVM、集合八股文自述(持续更新)

    Java基础.多线程.JVM.集合八股文自述 一.Java基础 1.1 object类有哪些方法? getClass().hashCode().equals().clone().toString(). ...

  7. Java基础-Eclipse第三方安装包管理工具之Maven

    Java基础-Eclipse第三方安装包管理工具之Maven 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 玩过Linux的小伙伴应该都知道yum吧,我们只要把搭建好的yum仓库配 ...

  8. Java 中的 XML:Java 文档模型的用法

    Java 中的 XML:Java 文档模型的用法 英文原文 内容: 代码对比 DOM JDOM dom4j Electric XML XPP 结束语 下一次... 参考资料 关于作者 对本文的评价 相 ...

  9. java基础知识大全,java 基础知识点汇总

    java 基础知识点汇总 问题一:我声明了什么! String s = "Hello world!"; 许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个Strin ...

最新文章

  1. 零基础入门学习Python(27)-文件2
  2. Oracle---对字段进行修改(varchar2修改clob)+ 索引失效
  3. 一码阻塞,万码等待:ASP.NET Core 同步方法调用异步方法“死锁”的真相
  4. 确保VDI顺利部署 试点项目是关键
  5. eigrp配置实验_EIGRP负载均衡的实现
  6. dfs-Bit Compression
  7. testng_TestNG @工厂注释
  8. Spring基础精华知识点
  9. nodejs学习笔记-1-文件系统
  10. 系统越用越臃肿,你需要的系统瘦身技巧.
  11. kibana异常 License information from the X-Pack plugin could not be obtained from Elasticsearch
  12. PBR基本原理和概念以及PBR流程
  13. 五款最优秀的java微服务框架
  14. Android,linux常用资源下载链接
  15. Android常见内存泄漏以及解决办法
  16. 蔡萍:深耕半导体行业二十年,复旦MBA“朋友圈”成智囊团
  17. 【01Studio MaixPy AI K210】6.PWM
  18. 甲骨文诉谷歌Java API版权纠纷可能移至美国最高法院
  19. 【计算机网络】家用路由器的NAT模式和路由模式
  20. 异步赠书1月书讯:Python/深度学习/贝叶斯/OpenStack/DevOps/Docker

热门文章

  1. 875. 爱吃香蕉的珂珂(二分)
  2. AB-string CodeForces - 1238D(思维)
  3. mysql 手工修复_MySQL自动备份和手工恢复
  4. 区别 和esc 打印指令tsc_复印机和打印机仅仅是功能上的区别?
  5. oracle关闭 manager,Oracle Enterprise Manager 11g 启停
  6. vim 命令_Vim 操作命令手册
  7. 关于RMQ问题的四种解法
  8. RTL 和 综合 等一些基本概念的摘记
  9. 随机森林分类器_建立您的第一个随机森林分类器
  10. 每月1000元存入余额宝或银行,十年后会有多少?