IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java 基础入门 | 第十七章 Java操作XML文件 -> 正文阅读

[Java知识库]Java 基础入门 | 第十七章 Java操作XML文件

目录

前言

dom4j

dom4j概述?

dom4j的封装和优势

面向接口编程

支持多种解析机制

下载和安装dom4j?

dom4j常用API

XML文档基本操作?

XML文档基本操作-Document

XML文档基本操作-Element

XML文档基本操作-Attribute?

XML文档基本操作-创建

XML文档基本操作-删除节点?

XML文档基本操作-建立xml文件

XML文档基本操作-查询节点

XPath支持

XPath简介

选择属性?

XPath语法?

作业


?

前言

JAXP虽然在DOM和SAX解析机制上进行了一定的抽象,但是对XML解析非常繁琐,编程代码冗长,可读性不高。因此在JAVA领域出现了两个开源的XML解析器:dom4j和JDOM。dom4j的开发者说:使用dom4j来解析XML文档,无须参考任何图书,只要有基本的DOM概念,那么
对着dom4j的API文档即可使用dom4j解析。

dom4j

dom4j概述?

dom4j是一套开源的XML解析工具,完全支持DOM、SAX和JAXP机制。与它们相比, dom4j
更为简单易用,因此实际项目中往往选择dom4j作为XML解析器。dom4j没有提供其他语言版本,只提供JAVA语言版本。

dom4j的封装和优势

dom4j在很大程序上简化了XML的处理方式。从表面上看, dom4j有点类似于DOM解析机制,也
将XML文档转换为一棵结构化树(dom4j树),但dom4j树的处理方式比DOM树更为简单。
?? ?由于dom4j如此优秀,很多优秀的开源项目都采用dom4j作为XML解析器,在实际的开发过程中,它通常是首选。

面向接口编程


? ? 它的实质是以其他XML解析器为基础, dom4j采用面向接口编程的方式来处理XML文档解析,这就允许dom4j的底层可以在不同的解析机制之间自由切换。


支持多种解析机制

  • DOMReader:它负责根据W3C的DOM树创建dom4j树
  • SAXReader:它基于SAX解析机制来分析一份XML文档,并将其转换为dom4j树
  • XPP3Reader:其底层需要依赖于XML Pulll Parser 3.x来解析XML文档,并将其转换为dom4j树
  • XPPReader:其底层需要依赖于XML Pulll Parser 2.x来解析XML文档,并将其转换为dom4j树 ? ?

下载和安装dom4j?

登录dom4j的官方站点下载最新版本dom4j1.6.1

下载完成后得到dom4j1.6.1.zip,将其解压缩可得到如下目录结构
docs:该目录下存放了dom4j的说明文件和API文档
lib:该目录下存放了dom4j编译和运行所依赖的第三方类库
Src:该目录下存放了dom4j项目的所有源文件
?xdocs:该目录存放dom4j的一些相关文档,是XML格式
xml:该目录下存放了dom4j提供了一些简单的范例xml文档
dom4j-1.6.1.jar:dom4j的核心JAR包?

将dom4j-1.6.1.jar添加到系统CLASSPATH环境变量中 ? ??
?

dom4j常用API

?

?

XML文档基本操作?

XML文档基本操作-Document

获取XML文档对象Document

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.net.MalformedURLException;

public class XMLTest {
    public static void main(String[] args) throws MalformedURLException, DocumentException {
        File xmlFile = new File("pom.xml");
        SAXReader reader = new SAXReader();
        Document xmlDoc = reader.read(xmlFile);
    }
}

XML文档基本操作-Element

获取根元素对象? ?

Element root = xmlDoc.getRootElement();

获取根元素名称?

String elementName = root.getName();

通过元素名称获取元素对象集合

Element element = root.element(“元素名称");

获取所有直接子元素对象集合

List elementList = root.elements();

获取element元素的内部文本

  String text = element.getText();

获取element子元素内部文本
?

String text = element.elementText(“子元素名称”);

遍历XML树DOM4J提供至少3种遍历节点的方法:
枚举(Iterator)

?? ?// 枚举所有子节点
?? ?for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
?? ??? ?Element element = (Element) i.next();
?? ??? ?// do something
?? ?}
?? ?// 枚举名称为foo的节点
?? ?for ( Iterator i = root.elementIterator(foo); i.hasNext();) {
?? ??? ?Element foo = (Element) i.next();
?? ??? ?// do something
?? ?}
?? ?// 枚举属性
?? ?for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {
?? ??? ?Attribute attribute = (Attribute) i.next();
?? ??? ?// do something
?? ?}

递归

public void treeWalk(Element element) {
	for (int i = 0, size = element.nodeCount(); i < size; i++){
			Node node = element.node(i);
			//如果得到的节点是一个元素就继续寻找子节点
			if (node instanceof Element) {
				treeWalk((Element) node);
			} else {
				// do something....
			}
		 }
}

Visitor模式

public class MyVisitor extends VisitorSupport {
?? ?public void visit(Element element){
?? ??? ?System.out.println(element.getName());
?? ?}
?? ?public void visit(Attribute attr){
?? ??? ?System.out.println(attr.getName());
?? ?}
}

调用 :root.accept(new MyVisitor()) 就可以了,Visitor接口提供多种Visit()的重载,根据XML不同的对象,将采用不同的方式来访问。上面是给出的Element和Attribute的简单实现,一般比较常用的就是这两个。VisitorSupport是DOM4J提供的默认适配器 。注意:这个Visitor是自动遍历所有节点的。如果是root.accept(MyVisitor),将遍历子节点

XML文档基本操作-Attribute?

获取元素属性对象
通过属性名获取元素属性对象

Attribute ? attribute = element.attribute(“属性名称");

通过索引获取属性对象

Attribute ?attribute = element.attribute(0);

获取所有属性对象集合

List ?attributeList = root.attributes();


获取属性值
通过属性对象

?String value = attribute.getValue();

通过元素对象

String ?value = element.attributeValue(“属性名称”);

XML文档基本操作-创建

创建文档Document

Document document = DocumentHelper. createDocument();

创建元素

Element element = document.addElement(“元素名称");

创建属性

element. addAttribute(“属性名”,“属性值");?

添加属性方法返回的是原元素对象。如同StringBuffer。
创建文本

element.addText(“文本");

XML文档基本操作-删除节点?

  • remove(Element element)
  • remove(Attribute attribute)?
  • remove(Text text)?
  • remove(Node node)

Node接口的子类对象都可以移除
注意:remove是移除直接子节点时使用

parentElement.remove(childElement);

XML文档基本操作-建立xml文件

建立xml文件

FileWriter fw = new FileWriter(“students2.xml”);
XMLWriter writer = new XMLWriter(fw);
writer.write(document);
writer.close();

建立漂亮的xml文档,可以指定字符编码

OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding(“GBK");
XMLWriter writer = new XMLWriter(fw,format);

XML文档基本操作-查询节点

获取所有符合条件的节点
selectNodes(String xpathExpression) 返回List集合

        List nodes= root.selectNodes("//dependency");

获取符合条件的单个节点
selectSingleNode(String xpathExpression) 返回一个Node对象。?? ?
如果符合条件的节点有多个,那么返回第一个。

   Node node= root.selectSingleNode("//dependency");

注意:使用dom4j-1.6.1.jar时,需要另一个包jaxen-1.1-beta-6.jar提供支持?

XPath支持

XPath简介

XPath是一个获取XML文档中你所需要的节点元素的组件。它允许你用很少的代码就能获取指定的路径下你所选取的节点的值。

DOM4J对XPath有良好的支持,如访问一个节点,可直接用XPath选择

?? ?public void bar(Document document) {
?? ??? ??? ?List list = document.selectNodes( //foo/bar );
?? ??? ??? ?Node node = document.selectSingleNode(//foo/bar/author);
?? ??? ??? ?String name = node.valueOf( @name );
?? ?}

选择属性?

  • 注释:用“/”路径开始代表元素的绝对路径.
  • 用“//”路径开始代表整个文档满足条件的所有元素
  • 在XPath中,所有属性使用@前缀
  • 下面的XPath表达式,选取所有名为catalog的属性
  • //@catalog
  • 下面的XPath表达式,选取所有具有catalog属性的item元素
  • //item[@catalog]
  • 下面的XPath表达式,选取所有具有任何属性的item元素
  • //item[@*]
  • 下面的XPath表达式,选取所有具有catalog等于"parts"属性的item元素
  • //item[@catalog="parts"]

XPath语法?

?

作业

1.将XML文件中的所有文本节点信息打印
?如:张三 20 北京李四 23 上海

2.获取年龄大于22的所有学生的姓名
1.定义xpath表达式
2.既然是所有,通过selectNodes方法获取到所有的student元素节点。


3.学生信息管理系统

该程序可以根据用户名的需求,完成基本的添加,删除,查询,修改等操作。
设计组成:

  • 描述学生
  • 描述功能(增删改查)
  • 描述对XML文档的操作
  • 操作控制台

上一章《Java 基础入门 | 第十六章 Java网络编程》icon-default.png?t=M1L8https://tarzan.blog.csdn.net/article/details/123034860

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-02-27 10:57:09  更:2022-02-27 10:58:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:28:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码