【JavaWeb】第六章 xml

news2024/12/26 23:06:03

文章目录

  • 1、XML简介
  • 2、xml语法
  • 3、xml解析
  • 4、Dom4j类库的使用
  • 5、dom4j解析xml

1、XML简介

xml是可扩展的标记性语言,xml的主要作用有:

  • 用来保存数据,而且这些数据具有自我描述性
    xml
  • 做为项目或者模块的配置文件
  • 做为网络传输数据的格式(现在以json为主)

2、xml语法

🍁xml元素

<?xml version="1.0" encoding="utf-8" ?>
<!--
    以上为xml文件的声明
    version="1.0" 表示xml的版本
    encoding="utf-8" 表示xml文件本身的编码方式
-->
<books><!--books表示多个图书信息-->
    <book sn="SN15731108123"> <!--book表示一个图书信息,sn属性表示图书的序列号-->
        <name>时间简史</name> <!--name标签表示书名-->
        <author>霍金</author>
        <price>75</price>
    </book>
    <book sn="SN15731108456"> 
        <name>JavaWeb</name> 
        <author>9527</author>
        <price>99.9</price>
    </book>
</books>

xml注释:

<!--和html一样-->

不同于html元素(标签),xml的元素可以自己定义,命名规则:

  • 可以包含字母、数字以及其他字符
  • 名称不能以数字或者标点符号开始
  • 名称不能以字符xml(或XML、Xml)开始(现在这条不限制了)
  • 名称不能包含空格
xml也分单标签和双标签

<book name="Java" author="9527" />

和html一样,都有属性来提供元素的额外信息。

🍺需要注意的是:

xml文档必须有且只有一个根元素,根元素即没有父标签的元素。

根元素

🍁文本区域(CDATA区)

CDATA区里的文本内容,只是纯文本,不会被xml语法解析

语法:
<![CDATA[xxx]]>

举例:
<author>
<![CDATA[<<这里的小于号不被xml解析]]>
</author>

3、xml解析

和html一样,xml做为可扩展的标记性语言,也可以使用w3c组织制定的dom技术来解析。

xml

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

早期的JDK提供了两种xml解析技术:

  • DOM
  • Sax(即Simple API for XML),已过时

除了以上,还有第三方解析:

  • jdom是在dom的基础上进行了封装
  • dom4j又对jdom进行了封装

第三方解析需要使用第三方提供的类库。

4、Dom4j类库的使用

下载dom4j.jar:

①、进入此网址
②、进入网址后搜索dom4j:
download
download
download
下载到本地:
download
复制jar包到项目下,右键Add as Library…

添加dom4j.jar到IDEA

项目目录

5、dom4j解析xml

xml文件内容:

<?xml version="1.0" encoding="utf-8" ?>
<books>
    <book sn="SN15731108123"> 
        <name>时间简史</name>
        <author>霍金</author>
        <price>75</price>
    </book>
    <book sn="SN15731108456"> 
        <name>JavaWeb</name> 
        <author>9527</author>
        <price>99.9</price>
    </book>
</books>

根据xml文件,定义Book类:

package com.code.book;

import java.math.BigDecimal;

public class Book {
    private String  sn;
    private String name;
    private double price;
    private String author;

    public Book(String sn, String name, double price, String author) {
        this.sn = sn;
        this.name = name;
        this.price = price;
        this.author = author;
    }

    public String getSn() {
        return sn;
    }

    public void setSn(String sn) {
        this.sn = sn;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    @Override
    public String toString() {
        return "Book{" +
                "sn='" + sn + '\'' +
                ", name='" + name + '\'' +
                ", price=" + price +
                ", author='" + author + '\'' +
                '}';
    }
}

定义解析成相关对象的方法:

import java.util.List;

public class Dom4jTest {
    public static void main(String[] args) throws DocumentException {
        new Dom4jTest().parse();
    }
    /**
     * 读取books.xml文件生成book类
     */
    public void parse() throws DocumentException {
        
       //创建一个SaxReader输入流
        SAXReader reader= new SAXReader();
        //读取books.xml文件,生成Document对象
        Document document = reader.read("xml/src/books.xml");
        //通过Document对象获取根元素
        Element rootElement = document.getRootElement();
        System.out.println(rootElement);
        //通过根元素获取book标签对象
        //element和elements方法都是通过标签名查找子元素,有多个的时候用s
        List<Element> bookList = rootElement.elements("book");
        //遍历,将每个book标签转换为Book类
        for(Element book : bookList){
            //asXML方法是把标签对象转换为标签字符串
            System.out.println(book.asXML());
            //继续用element方法取子元素
            Element nameElement = book.element("name");
            //System.out.println(nameElement.asXML());
            //getText方法可以获取标签中的文本内容
            String nameText = nameElement.getText();
            //也可直接使用elementText方法获取指定标签名的文本内容
            String bookName = book.elementText("name");
            String bookAuthor = book.elementText("author");
            String  bookPrice = book.elementText("price");
            //获取标签属性值
            String snValue = book.attributeValue("sn");
            //从xml中拿到数据以后,new对象
            Book bookObj = new Book(snValue,bookName,Double.parseDouble(bookPrice),bookAuthor);
            System.out.println(bookObj);

        }

    }
}

运行效果:
run

🍁相关方法提取:

  • getRootElement() 通过document对象获取根元素
  • elements(“tagName”) 通过标签名查找子元素,有多个的时候用s
  • asXML() 把标签对象转换为标签字符串
  • getText() 获取标签中的文本内容
  • elementText("tagName) 获取指定标签名的文本内容
  • attributeValue(“key”) 获取标签属性值

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

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

相关文章

QML 如何显示文本?Text可以有多少功能?

目录1.如何显示文本&#xff1f;2. Text有哪些主要功能&#xff1f;2.1 基本属性示例2.2 字重属性2.3 字体样式2.4 字体上标下标支持2.5 富文本2.6 文字换行 缩略1.如何显示文本&#xff1f; Text {font.pixelSize: 20; text: "这是20普通文字"} //一行即可以上代码…

12.2排序

目录 0.做题的失误 1.引用传值和传址 1.斐波那契数列 一.快速排序 1.挖坑法 2.优化 2.1 随机取数法 2.2 三数取中法 2.3把基准值相同的值移到基准旁边 2.4引用直接插入排序 3.Hoare 法: 4.非递归法 5.总结 二,归并排序 1.原理 2.代码实现 3.分析 4.非递归 5…

Git(第一篇)——Git的下载与安装(史上最全最详细)

Git&#xff08;第一篇&#xff09;——Git的下载与安装&#xff08;史上最全最详细&#xff09; 目录Git&#xff08;第一篇&#xff09;——Git的下载与安装&#xff08;史上最全最详细&#xff09;git的下载git的安装git的下载 如果你还没有下载Git&#xff0c;可直接到git…

什么是数据管理能力成熟度评估(DCMM)

GB/T 36073-2018 《数据管理能力成熟度评估模型》&#xff08;Data Management Capability Maturity Assessment Model&#xff0c;简称&#xff1a;DCMM&#xff09;是我国数据管理领域首个国家标准。该标准将组织对象的数据管理划分为八大能力域&#xff08;数据战略、数据治…

【Hbase】第一章——从原理剖析

文章目录1. HBase的实现原理1.1 HBase功能组件1.2 表和Region1.3 Region的定位2. HBase运行机制2.1 HBase系统架构2.2 Region服务器工作原理2.3 Store工作原理2.4 HLog工作原理3. HBase应用方案3.1 HBase实际应用中的性能优化方法3.2 HBase性能监视3.3 在HBase之上构建SQL引擎3…

【图像压缩】DCT图像无损压缩【含GUI Matlab源码 726期】

⛄一、DCT图像无损压缩简介 1 图像压缩 图像压缩按照压缩过程中是否有信息的损失以及解压后与原始图像是否有误差可以分为无损压缩和有损压缩两大类。无损压缩是指不损失图像质量的压缩&#xff0c;它是对文件的存储方式进行优化&#xff0c;采用某种算法表示重复的数据信息&a…

关于Jetpack Compose的初步使用、学习和总结

初步使用和学习ComposeJetpack Compose简要介绍创建一个Jetpack Compose项目自定义组合函数MessageCard通过修饰符&#xff0c;进一步改善布局为什么使用ComposeCompose 与 XML总结与期望Jetpack Compose 简要介绍 根据developers上的介绍&#xff0c;Jetpack Compose 是推荐…

【3D目标检测】Rethinking Pseudo-LiDAR Representation

目录概述细节证明基于伪点云的3D目标检测算法效果好的原因并不是伪点云这种数据表示基于深度图的图像表示的算法PatchNet证明基于伪点云的3D目标检测算法效果好的原因是从图像到点云坐标系转换的过程概述 本文是基于图像的3D目标检测算法。 贡献&#xff1a; 作者认为基于伪点…

开放式运动耳机排行榜,排行靠前的五款高性能耳机分享

智能产品的发展迅猛&#xff0c;作为生活必需品的耳机&#xff0c;更是在不断的更新&#xff0c;尤其是对于运动爱好者而言&#xff0c;以往的入耳式蓝牙耳机存在汗渍入耳等问题。而为了有效解决这一些列问题&#xff0c;新型的骨传导耳机随之诞生了&#xff0c;相比入耳式的蓝…

一定要用Photoshop?no!动手用Python做一个颜色提取器! ⛵

&#x1f4a1; 作者&#xff1a;韩信子ShowMeAI &#x1f4d8; Python3◉技能提升系列&#xff1a;https://www.showmeai.tech/tutorials/56 &#x1f4d8; 计算机视觉实战系列&#xff1a;https://www.showmeai.tech/tutorials/46 &#x1f4d8; 本文地址&#xff1a;https://…

直播 | 数据仓库?数据湖?停止纠结,流批融合的极速 Lakehouse来了!

万物皆数据的时代&#xff0c;各行各业对数据分析架构的要求日益拔高&#xff0c;打破传统的数据湖应需而生。企业得以用更低廉的成本、更完善的 ACID 支持、更实时的方式&#xff0c;导入并存储所有结构化、半结构化和非结构化数据。得益于数据湖良好的伸缩性和灵活性&#xf…

jQuery 安装

网页中添加 jQuery 可以通过多种方法在网页中添加 jQuery。 您可以使用以下方法&#xff1a; 从 jquery.com 下载 jQuery 库从 CDN 中载入 jQuery, 如从 Google 中加载 jQuery下载 jQuery 有两个版本的 jQuery 可供下载&#xff1a; Production version - 用于实际的网站中…

渲染时间过长?这些参数设置学起来

渲染时间 为了契合创作者的需求&#xff0c;V-Ray渲染器近年来迭代迅速&#xff0c;新版本的上线&#xff0c;便利了更多用户。但也有小伙伴在使用后反馈&#xff1a; 我的渲染器明明已经升级到最高版本了&#xff0c;为什么渲染时间还这么慢&#xff1f; 实际上&#xff0c;出…

如何通过一个项目征服Java

Java早已经不是高大山的稀世珍品了&#xff0c;程序员也不再是高科技工作者&#xff0c;而被称为码农 &#xff0c;为什么呢&#xff1f;因为Java后台的很多基础技术都已经固定了&#xff0c;也就是说主要你从头到尾学一遍就能会 &#xff0c;淘宝双十一搞不定&#xff0c;但是…

2022年12月深圳/珠海/佛山/东莞数据分析CPDA认证报名

2022年12月深圳/珠海/佛山/东莞数据分析CPDA认证报名 CPDA数据分析师认证是中国大数据领域有一定权威度的中高端人才认证&#xff0c;它不仅是中国较早大数据专业技术人才认证、更是中国大数据时代先行者&#xff0c;具有广泛的社会认知度和权威性。 无论是地方政府引进人才、…

HAL库(STM32CubeMX)之看门狗学习及实操(STM32F767IGTX)

系列文章目录 HAL库&#xff08;STM32CubeMX&#xff09;——ADC学习总结&#xff08;包含单次/连续模式下的轮询/中断/DMA&#xff09;&#xff08;蓝桥杯STM32G431RBT6&#xff09; HAL库(STM32CubeMX)——DAC学习&#xff08;STM32G431RBT6&#xff09; HAL库(STM32CubeM…

Innodb如何实现表--上篇

Innodb如何实现表--上篇数据是如何被管理起来的表空间段区页行行记录格式Compact记录行格式Redundant行记录格式行溢出数据Compressed和Dynamic行记录格式Char的行存储结构小结数据是如何被管理起来的 从InnoDB存储引擎的逻辑存储结构看&#xff0c;所有数据都被逻辑地存放在一…

[附源码]计算机毕业设计JAVA宿舍管理系统

[附源码]计算机毕业设计JAVA宿舍管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis M…

十万部冷知识:奥运会冠城市名,世界杯为什么冠国名?

不知道大家发现没有&#xff0c;凡是给奥运会、亚运会等很多比赛取名的时候&#xff0c;往往都是给它冠以城市的名字。比如&#xff0c;北京冬奥会、广州亚运会、北京奥运会等等&#xff0c;而称呼世界杯的时候&#xff0c;我们往往是冠以国家的名字称呼的&#xff0c;诸如&…

Day17-购物车页面-商品列表-实现滑动删除功能

提纲挈领&#xff1a; 官方文档&#xff1a; 博主文档&#xff1a; 我的操作&#xff1a; 1》改造 cart.vue 页面的 UI 结构&#xff0c;将商品列表区域的结构修改如下&#xff08;可以使用 uSwipeAction 代码块快速生成基本的 UI 结构&#xff09;&#xff1a; 2》在 data 节…