05_xml

news2024/11/18 17:41:12

目录

  • 0、文档声明
  • 1.XML 简介
  • 2、xml 的作用?
  • 3、xml 语法
    • 3.1、文档声明
    • 3.2、xml 注释
    • 3.3、元素(标签)
    • 3.4、xml 属性
    • 3.5、语法规则:
      • 3.5.1)所有 XML 元素都须有关闭标签(也就是闭合)
      • 3.5.2)XML 标签对大小写敏感
      • 3.5.3)XML 必须正确地嵌套
      • 3.5.4)XML 文档必须有根元素
      • 3.5.5)XML 的属性值须加引号
      • 3.5.6)XML 中的特殊字符
      • 3.5.7)文本区域(CDATA 区)
  • 4、xml 解析技术介绍
  • 5、dom4j 解析技术(重点*****)
    • 5.1、Dom4j 类库的使用
    • 5.2、dom4j 目录的介绍:
      • 1)docs 是 文 档 目 录
      • 2)lib 目录
      • 3)src 目录是第三方类库的源码目录:
    • 5.3、dom4j 编程步骤:
    • 5.4、获取 document 对象
    • 5.5、遍历 标签 获取所有标签中的内容(*****重点)

0、文档声明

在这里插入图片描述

补充:
新建的工程颜色深,而且有src目录。
在这里插入图片描述

1.XML 简介

什么是 xml?
xml 是可扩展的标记性语言。

2、xml 的作用?

xml 的主要作用有:
1、用来保存数据,而且这些数据具有自我描述性
2、它还可以做为项目或者模块的配置文件
3、还可以做为网络传输数据的格式(现在 JSON 为主)。

3、xml 语法

  1. 文档声明。
  2. 元素(标签)
  3. xml 属性
  4. xml 注释
  5. 文本区域(CDATA 区)

3.1、文档声明

我们先创建一个简单 XML 文件,用来描述图书信息。

1)创建一个 xml 文件
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?> xml 声明。
<!-- xml 声明 version 是版本的意思 encoding 是编码 -->
而且这个<?xml 要连在一起写,否则会有报错


属性
version 是版本号
encoding 是 xml 的文件编码
standalone="yes/no" 表示这个 xml 文件是否是独立的 xml 文件

2)图书有 id 属性 表示唯一 标识,书名,有作者,价格的信息

<?xml version="1.0" encoding="utf-8" ?>
<!-- xml声明 version是版本的意思   encoding是编码  -->
<books> <!-- 这是xml注释 -->
    <book id="SN123123413241"> <!-- book标签描述一本图书   id属性描述 的是图书 的编号  -->
        <name>java编程思想</name> <!-- name标签描述 的是图书 的信息 -->
        <author>华仔</author>		<!-- author单词是作者的意思 ,描述图书作者 -->
        <price>9.9</price>		<!-- price单词是价格,描述的是图书 的价格 -->
    </book>
    <book id="SN12341235123">	<!-- book标签描述一本图书   id属性描述 的是图书 的编号  -->
        <name>葵花宝典</name>	<!-- name标签描述 的是图书 的信息 -->
        <author>班长</author>	<!-- author单词是作者的意思 ,描述图书作者 -->
        <price>5.5</price>	<!-- price单词是价格,描述的是图书 的价格 -->
    </book>
</books>

在浏览器中可以查看到文档

在这里插入图片描述

3.2、xml 注释

html 和 XML 注释 一样 : <!-- html 注释 -->

3.3、元素(标签)

咱们先回忆一下:

html 标签:
格式:<标签名>封装的数据</标签名>
单标签: <标签名 /> <br /> 换行 <hr />水平线
双标签 <标签名>封装的数据</标签名>
标签名大小写不敏感
标签有属性,有基本属性和事件属性
标签要闭合(不闭合 ,html 中不报错。但我们要养成良好的书写习惯。闭合)

1)什么是 xml 元素

在这里插入图片描述

元素是指从开始标签到结束标签的内容。
例如:

<title>java 编程思想</title>

元素 我们可以简单的理解为是 标签。
Element 翻译 元素

2)XML 命名规则
XML 元素必须遵循以下命名规则:

2.1)名称可以含字母、数字以及其他的字符

例如:

<book id="SN213412341"> <!-- 描述一本书 -->
<author>班导</author> <!-- 描述书的作者信息 -->
<name>java 编程思想</name> <!-- 书名 -->
<price>9.9</price> <!-- 价格 -->
</book>

2.2)名称不能以数字或者标点符号开始

在这里插入图片描述
2.3)名称不能以字符 “xml”(或者 XML、Xml)开始 (它是可以的)

在这里插入图片描述

2.4)名称不能包含空格

在这里插入图片描述

3)xml 中的元素(标签)也 分成 单标签和双标签:

单标签
格式: <标签名 属性=”值” 属性=”值” ...... />

双标签
格式:< 标签名 属性=”值” 属性=”值” ......>文本数据或子标签</标签名>

在这里插入图片描述

3.4、xml 属性

xml 的标签属性和 html 的标签属性是非常类似的,属性可以提供元素的额外信息

在标签上可以书写属性:
一个标签上可以书写多个属性。每个属性的值必须使用 引号 引起来。

规则和标签的书写规则一致。

在这里插入图片描述

1)属性必须使用引号引起来,不引会报错示例代码

在这里插入图片描述

3.5、语法规则:

3.5.1)所有 XML 元素都须有关闭标签(也就是闭合)

在这里插入图片描述

3.5.2)XML 标签对大小写敏感

在这里插入图片描述

3.5.3)XML 必须正确地嵌套

在这里插入图片描述

3.5.4)XML 文档必须有根元素

根元素就是顶级元素,
没有父标签的元素,叫顶级元素。
根元素是没有父标签的顶级元素,而且是唯一一个才行。

在这里插入图片描述

3.5.5)XML 的属性值须加引号

在这里插入图片描述

3.5.6)XML 中的特殊字符

在这里插入图片描述

3.5.7)文本区域(CDATA 区)

CDATA 语法可以告诉 xml 解析器,我 CDATA 里的文本内容,只是纯文本,不需要xml 语法解析

CDATA 格式:

<![CDATA[ 这里可以把你输入的字符原样显示,不会解析 xml ]]>

在这里插入图片描述

4、xml 解析技术介绍

xml 可扩展的标记语言。
不管是 html 文件还是 xml 文件它们都是标记型文档,都可以使用 w3c 组织制定的dom技术来解析。

在这里插入图片描述

document 对象表示的是整个文档(可以是 html 文档,也可以是 xml 文档)

在这里插入图片描述

5、dom4j 解析技术(重点*****)

由于 dom4j 它不是 sun 公司的技术,而属于第三方公司的技术,我们需要使用dom4j 就需要到dom4j 官网下载dom4j的 jar 包。

5.1、Dom4j 类库的使用

在这里插入图片描述

解压后:

在这里插入图片描述

5.2、dom4j 目录的介绍:

1)docs 是 文 档 目 录

在这里插入图片描述

如何查 Dom4j 的文档
在这里插入图片描述

Dom4j 快速入门
在这里插入图片描述

2)lib 目录

在这里插入图片描述

3)src 目录是第三方类库的源码目录:

在这里插入图片描述

5.3、dom4j 编程步骤:

第一步: 先加载 xml 文件创建 Document 对象
第二步:通过 Document 对象拿到根元素对象
第三步:通过根元素.elelemts(标签名); 可以返回一个集合,这个集合里放着。所有你指定的标签名的元素对象
第四步:找到你想要修改、删除的子元素,进行相应在的操作
第五步,保存到硬盘上

5.4、获取 document 对象

创建一个 lib 目录,并添加 dom4j 的 jar 包。并添加到类路径。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

需要解析的 books.xml 文件内容

<?xml version="1.0" encoding="UTF-8"?>
<books>
    <book sn="SN12341232">
        <name>辟邪剑谱</name>
        <price>9.9</price>
        <author>班主任</author>
    </book>
    <book sn="SN12341231">
        <name>葵花宝典</name>
        <price>99.99</price>
        <author>班长</author>
    </book>
</books>

解析获取 Document 对象的代码
第一步,先创建 SaxReader 对象。这个对象,用于读取 xml 文件,并创建 Document

    @Test
    public void test1() throws Exception
    {
        // 创建一个SaxReader输入流,去读取 xml配置文件,生成Document对象
        SAXReader saxReader = new SAXReader();


        Document document = saxReader.read("src/books.xml");

        System.out.println(document);
    }


5.5、遍历 标签 获取所有标签中的内容(*****重点)

在这里插入图片描述

需要分四步操作:
第一步,通过创建 SAXReader 对象。来读取 xml 文件,获取 Document 对象
第二步,通过 Document 对象。拿到 XML 的根元素对象
第三步,通过根元素对象。获取所有的 book 标签对象
第四小,遍历每个 book 标签对象。然后获取到 book 标签对象内的每一个元素,再通过getText() 方法拿到起始标签和结束标签之间的文本内容

package com.atguigu.pojo;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;

import java.util.List;

public class Dom4jTest
{
    @Test
    public void test1() throws Exception
    {
        // 创建一个SaxReader输入流,去读取 xml配置文件,生成Document对象
        SAXReader saxReader = new SAXReader();


        Document document = saxReader.read("src/books.xml");

        System.out.println(document);
    }


    /**
     * 读取books.xml文件生成Book类
     */
    @Test
    public void test2() throws Exception
    {
        //1 读取books.xml 文件
        SAXReader reader = new SAXReader();
        // 在Junit测试中,相对路径是从模块名开始算
        Document document = reader.read("src/books.xml");

        // 2 通过Document对象获取根元素
        Element rootElement = document.getRootElement();
//        System.out.println(rootElement);

        //3 通过根元素获取book标签对象
        //element()和elements()都是通过标签名查找子元素
        List<Element> books = rootElement.elements("book");

        // 4 遍历,处理每个book标签转换为Book类
        for (Element book : books)
        {
            //asXML() 标签对象。转换为标签字符串
//            System.out.println(book.asXML());
            Element nameElement = book.element("name");

            // getText();可以获取标签中的文本内容
            String nameText = nameElement.getText();

            // 直接 获取指定标签名的文本内容
            String priceText = book.elementText("price");
            String authorText = book.elementText("author");

            // 获取属性值
            String snValue = book.attributeValue("sn");

            System.out.println(new Book(snValue, nameText, Double.parseDouble(priceText), authorText));

        }
    }
}

打印内容:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/195134.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp:常用跨端业务组件(ts版本)

插件内组件包含以下功能&#xff1a; 自定义状态栏组件(ZoNavBar)上拉加载状态组件(ZoLoading)弹窗组件(ZoPopup)搜索组件(ZoSearchBar)空数据组件(ZoEmpty)tab标签组件(ZoTabs)tab下拉筛选组件(ZoSelectTabs)底部导航组件(ZoTabBar)cell导航组件(ZoCell) 10.标题内容组件(ZoT…

iptables端口复用后门、sslh

iptables端口复用 创建端口复用链 创建端口复用规则将流量转到22端口 开启开关&#xff0c;接收到一个长为1139的icmp包&#xff0c;则将来源ip添加到LETMEIN表中 如果syn包来源ip处于letmein列表中&#xff0c;则跳转到LETMEIN链处理&#xff0c;有效时间为3600秒 开启复…

c++11 标准模板(STL)(std::multiset)(五)

定义于头文件 <set> template< class Key, class Compare std::less<Key>, class Allocator std::allocator<Key> > class multiset;(1)namespace pmr { template <class Key, class Compare std::less<Key>> usi…

PyQt5编程基础 2.2 信号与槽函数

信号与槽函数信号&#xff08;Signal&#xff09;信号是在特定情况下被发射的一种通告。举例&#xff1a;PushButton的信号是鼠标单击时发射的clicked信号槽&#xff08;Slot&#xff09;对信号相应的函数。举例&#xff1a;Qwidget有一个槽函数&#xff0c;功能是关闭窗口信号…

Uncaught SyntaxError: Unexpected token ... 【bug记录】vue项目发布

项目场景&#xff1a; 项目场景&#xff1a;部署vue项目&#xff0c;组件或页面html使用ES6语法导致&#xff0c;界面无法显示。 客户那边采用了比较低版本的浏览器&#xff0c;自己电脑上却没有出现&#xff0c;也不方便调试测试。 问题描述 打开来控制台&#xff0c;看到异…

单片机开发---ESP32S3移植NES模拟器(一)

书接上文 《单片机开发—ESP32-S3模块上手》 《单片机开发—ESP32S3移植lvgl触摸屏》 参考内容 依旧是参考韦东山老师的作品来移植的 《ESP32|爷青回&#xff01;ESP32(单片机) NES模拟器_NES游戏机掌机教程(开源详细讲解实现代码&#xff01;)》 韦老师已经将代码开源&am…

深入解读神策分析云两大闭环,助力企业全面数字化转型应用

随着市场的发展、客户的深度使用以及全新的产品认知&#xff0c;神策希望能够帮助企业客户构建拥有正向反馈、持续提升、优化经营效率的数据应用闭环。本次&#xff0c;神策在用户行为分析的基础上&#xff0c;对分析云的整体产品架构进行全面升级&#xff0c;不仅包括公私域流…

json字符带有反斜杠\处理

目录说明说明 json字符带有反斜杠\&#xff0c;需要转义处理 <dependency><groupId>org.apache.commons</groupId><artifactId>commons-text</artifactId><version>1.6</version></dependency>String json "{\"n…

解决安装2.4版本的percona-xtrabackup和5.6版本的mysql冲突的问题

问题描述&#xff1a;在阿里云上有一个5.6版本的mysql&#xff0c;想把备份的数据恢复到本地。按照阿里云的文档描述&#xff0c;本机mysql的版本也得是5.6&#xff0c;percona-xtrabackup版本得是2.4。于是开始动手操作&#xff0c;无非是在本机安装5.6版本的mysql和2.4版本的…

【C++】C++11语法 ~ 可变参数模板

&#x1f308;欢迎来到C专栏~可变参数模板 (꒪ꇴ꒪(꒪ꇴ꒪ )&#x1f423;,我是Scort目前状态&#xff1a;大三非科班啃C中&#x1f30d;博客主页&#xff1a;张小姐的猫~江湖背景快上车&#x1f698;&#xff0c;握好方向盘跟我有一起打天下嘞&#xff01;送给自己的一句鸡汤&…

2月3日第壹简报,星期五,农历正月十三

2月3日第壹简报&#xff0c;星期五&#xff0c;农历正月十三坚持阅读&#xff0c;静待花开1. 香港&#xff1a;将向世界各地旅客派发50万张免费机票&#xff0c;3月1日起派发&#xff0c;为期6个月&#xff0c;率先向东南亚地区送出。2. 我国新增18处国际重要湿地&#xff0c;湿…

聚观早报|网易开放暴雪游戏退款申请通道;鱼跃医疗回应被罚270万

今日要闻&#xff1a;网易开放暴雪游戏退款申请通道&#xff1b;谷歌 ChatGPT 竞品搜索设计将迎来大改&#xff1b;“鱼跃医疗”回应被罚270万元&#xff1b;大众考虑在加拿大建设新的电池工厂&#xff1b;微软将把ChatGPT整合到必应搜索中网易开放暴雪游戏退款申请通道 2 月 1…

力扣刷题|654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

LeetCode 654.最大二叉树 题目链接&#x1f517; LeetCode 654.最大二叉树 思路 最大二叉树的构建过程如下&#xff1a; 构造树一般采用的是前序遍历&#xff0c;因为先构造中间节点&#xff0c;然后递归构造左子树和右子树。 class Solution {public TreeNode constructM…

构造http请求的几种方式(附源码)

文章目录前言一、form表单构造http请求二、ajax构造http请求三、Java socket构造http请求总结前言 博主个人社区&#xff1a;开发与算法学习社区 博主个人主页&#xff1a;Killing Vibe的博客 欢迎大家加入&#xff0c;一起交流学习~~ 一、form表单构造http请求 form (表单) 是…

SSH基础知识(一)

SSH基础知识SSH对称加密非对称加密如何生成秘钥如何管理秘钥不同版本ssh命令安装ssh启动ssh服务登录ssh退出ssh登录远程登录执行命令ssh参数端口转发本地转发远程转发动态转发最近有用到SFTP协议完成一些功能开发&#xff0c;这玩意和FTP比较像&#xff0c;当时以为是升级版&am…

FPGA和CPLD芯片选型介绍(二)

FPGA器件选型&#xff08;以Xilinx和Altera为例&#xff09;器件选型是件很严肃的事情&#xff0c;既要考虑性能又要兼顾成本&#xff0c;还要考虑长期供货的稳定性&#xff0c;因此很考验工程师的知识广度储备。一般而言&#xff0c;FPGA&#xff08;CPLD&#xff09;需要分三…

3、Maven——Maven创建java web工程,Maven search插件

目录 一、Maven创建java web工程 二、Maven创建java web项目的结构 1、添加项目目录 2、web.xml配置处理报错 三、IDEA更改XML版本 一、Maven创建java web工程 创建Empty Project空工程&#xff1b;右击Empty Project工程--->New--->Module--->Maven Archetype N…

Linux环境下安装软件合集【2】

Linux环境下安装软件合集【2】 Linux环境下安装软件合集【1】 1 安装tomcat 1.1 安装启动tomcat 下载tomcat压缩包 通过wget方式 wget --no-check-certificate https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.70/bin/apache-tomcat-9.0.70.tar.gz直接官网下载压缩包&…

23k入职腾讯测试岗那天,我哭了,这5个月付出的一切总算没有白费~

先说一下自己的个人情况&#xff0c;计算机专业&#xff0c;16年普通二本学校毕业&#xff0c;经历过一些失败的工作经历后&#xff0c;经推荐就进入了华为的测试岗&#xff0c;进去才知道是接了个外包项目&#xff0c;不太稳定的样子&#xff0c;可是刚毕业谁知道什么外包不外…

基于SSH框架的学生成绩管理系统源码+数据库,Struts2、Spring与Hibernate整合应用,实验报告

Struts2、Spring与Hibernate整合应用&#xff1a;基于SSH框架的学生成绩管理系统 最近一个实验课程&#xff0c;需要做一个基于SSH框架的学生成绩管理系统。就简简单单做了一下…… 1.1 实验要求&#xff1a; &#xff08;1&#xff09; 整合Struts2、Spring和Hibernate框架 …