当前位置: 首页 > news >正文

Java文件操作①——XML文件的读取

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 一、邂逅XML
  • 二、应用 DOM 方式解析 XML
  • 三、应用 SAX 方式解析 XML
  • 四、应用 DOM4J 及 JDOM 方式解析 XML
  • JDOM 方式解析 XML
  • DOM4J 方式解析 XML


前言

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。
在这里插入图片描述


一、邂逅XML

文件种类是丰富多彩的,XML作为众多文件类型的一种,经常被用于数据存储和传输。所以XML在现今应用程序中是非常流行的。本文主要讲Java解析和生成XML。用于不同平台、不同设备间的数据共享通信。

XML文件的表现:以“.xml”为文件扩展名的文件;

存储结构:树形结构;
在这里插入图片描述
节点名称区分大小写。

1、 id为属性, 1 id为节点
2、xml文件开头要加上版本信息和编码方式<?xml version="1.0" encoding="UTF-8"?>

比如:
在这里插入图片描述
❤ 为什么要使用XML?
思考1:不同应用程序之间的通信?
在这里插入图片描述
思考2:不同平台间的通信?
在这里插入图片描述
思考3:不同平台间的数据共享?
在这里插入图片描述
答案就是我们要学习的XML文件。我们可以使用相同的xml把不同的文件联系起来

在这里插入图片描述

二、应用 DOM 方式解析 XML

❤ 在Java程序中如何获取XML文件的内容
在这里插入图片描述
解析的目的:获取节点名、节点值、属性名、属性值;

四种解析方式:DOM、SAX、DOM4J、JDOM

DOM、SAX :java 官方方式,不需要下载jar包
DOM4J、JDOM :第三方,需要网上下载jar包

示例:解析XML文件,目标是解析XML文件后,Java程序能够得到xml文件的所有数据

思考:如何在Java程序中保留xml数据的结构?
在这里插入图片描述
如何保留节点之间的层级关系?

注意常用的节点类型:
在这里插入图片描述
下面介绍DOM方式解析XML:
在这里插入图片描述
功能说明:
在这里插入图片描述
在这里插入图片描述

代码示例:

package com.study.domtest;import java.io.IOException;import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;/*** DOM方式解析xml*/
public class DOMTest {public static void main(String[] args) {//1、创建一个DocumentBuilderFactory的对象DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();//2、创建一个DocumentBuilder的对象try {//创建DocumentBuilder对象DocumentBuilder db = dbf.newDocumentBuilder();//3、通过DocumentBuilder对象的parser方法加载books.xml文件到当前项目下/*注意导入Document对象时,要导入org.w3c.dom.Document包下的*/Document document = db.parse("books.xml");//传入文件名可以是相对路径也可以是绝对路径//获取所有book节点的集合NodeList bookList = document.getElementsByTagName("book");//通过nodelist的getLength()方法可以获取bookList的长度System.out.println("一共有" + bookList.getLength() + "本书");//遍历每一个book节点for (int i = 0; i < bookList.getLength(); i++) {System.out.println("=================下面开始遍历第" + (i + 1) + "本书的内容=================");//❤未知节点属性的个数和属性名时://通过 item(i)方法 获取一个book节点,nodelist的索引值从0开始Node book = bookList.item(i);//获取book节点的所有属性集合NamedNodeMap attrs = book.getAttributes();System.out.println("第 " + (i + 1) + "本书共有" + attrs.getLength() + "个属性");//遍历book的属性for (int j = 0; j < attrs.getLength(); j++) {//通过item(index)方法获取book节点的某一个属性Node attr = attrs.item(j);//获取属性名System.out.print("属性名:" + attr.getNodeName());//获取属性值System.out.println("--属性值" + attr.getNodeValue());}//❤已知book节点有且只有1个id属性:/*//前提:已经知道book节点有且只能有1个id属性//将book节点进行强制类型转换,转换成Element类型Element book1 = (Element) bookList.item(i);//通过getAttribute("id")方法获取属性值String attrValue = book1.getAttribute("id");System.out.println("id属性的属性值为" + attrValue);*///解析book节点的子节点NodeList childNodes = book.getChildNodes();//遍历childNodes获取每个节点的节点名和节点值System.out.println("第" + (i+1) + "本书共有" + childNodes.getLength() + "个子节点");for (int k = 0; k < childNodes.getLength(); k++) {//区分出text类型的node以及element类型的nodeif(childNodes.item(k).getNodeType() == Node.ELEMENT_NODE){//获取了element类型节点的节点名System.out.print("第" + (k + 1) + "个节点的节点名:" + childNodes.item(k).getNodeName());//获取了element类型节点的节点值System.out.println("--节点值是:" + childNodes.item(k).getFirstChild().getNodeValue());<
http://www.lryc.cn/news/363953.html

相关文章:

  • 【记录】网络|没有路由器没有网线,分别使用手机或Windows电脑共享网络给ARM64开发板,应急连接
  • 一键设置常用纸张和页面边距-Word插件-大珩助手
  • 在树莓派3B+中下载opencv(遇到的各种问题及解决)
  • 精准检测,安全无忧:安全阀检测实践指南
  • Transformer系列:图文详解KV-Cache,解码器推理加速优化
  • 基础篇03——SQL约束
  • 人工智能--深度神经网络
  • VOC格式标签各个字段的解释
  • 2024年端午节放假通知
  • Transformer系列:注意力机制的优化,MQA和GQA原理简述
  • Python知识点11---高阶函数
  • JavaSE——【逻辑控制】(习题)
  • 自动驾驶仿真:python和carsim联合仿真案例
  • Qt报错:libvlc开发的程序,出现Direct3D output全屏窗口
  • yolov5的口罩识别系统+GUI界面 (附代码)
  • WPF中Window的外观实现及常用属性
  • (有代码示例)Vue 或 JavaScript中使用全局通信的3种方式
  • MAB规范(1):概览介绍
  • 基于振弦采集仪的土木工程安全监测技术研究
  • 这个高考作文满分的极客,想和你聊聊新媒体写作
  • AI推介-多模态视觉语言模型VLMs论文速览(arXiv方向):2024.05.25-2024.05.31
  • 如何通过Python SMTP配置示例发附件邮件?
  • amd64
  • 2024如何优化SEO?
  • 【NoSQL数据库】Redis命令、持久化、主从复制
  • 使用Django JWT实现身份验证
  • MT2084 检测敌人
  • 支持向量机、随机森林、K最近邻和逻辑回归-九五小庞
  • MySQL—多表查询—多表关系介绍
  • Vue基础篇--table的封装