Java基础进阶02-xml

这篇具有很好参考价值的文章主要介绍了Java基础进阶02-xml。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、XML(可拓展标记语言)

1.学习网站:

https://www.w3schoo1.com.cn

  • 标记语言:通过标签来描述数据的一门语言(标签有时我们也将其称之为元素)

  • 可扩展:标签的名字是可以自定义的

2.作用

  • 用于进行存储数据和传输数据

  • 作为软件的配置文件

3.XML标签

  • 标签由一对尖括号和合法标识符组成 < user >

  • 标签必须成对出现< user >< user/>

  • 特殊的标签可以不成对,但是必须有结束标记< user/ >

  • 标签中可以定义属性,属性和标签名空格隔开属性值必须用引号(单/双)引起来< user id = "100"/>

  • 标签需要正确的嵌套

4.XML语法

  • 后缀名为.xml

  • 文档声明必须是第一行第一列

<?xmlversion="1.0”encoding="UTF-8" standalone= “yes”?>
其中
version属性必须存在
encoding属性不是必须的,作用:打开当前xml文件的时候应该是使用什么字符编码表(默认都是UTF-8)
standalone属性不是必须的,作用:描述XML文件是否依赖其他的xml文件,取值为yes/no
  • 必须存在根标签

  • XML文件中可以定义注释信息

  • XML文件中可以存在以下特殊字符

&lt;-----------------小于
&gt;-----------------大于
&amp;----------------和号(&)
&apos;---------------单引号
&quot;---------------引号
  • XML可以存在CDATA区

<![CDATA[ ...内容...]]>

5.解析XML

(1)常见解析思想DOM
  • DOM(DocumentObject Model)文档对象模型:

就是把文档的各个组成部分看做成对应的对象,会把xmI文件全部加载到内存在内存中形成一个树形结构,再获取对应的值

其中DOM对象主要有以下部分

  • Document对象:整个xml文档

  • Element对象:所有标签

  • Attribute对象:所有属性

  • Text对象:所有文本内容

其中Element,Attribute,Text有一个共同的父类:Node对象

6.常见的解析工具

  • JAXP:SUN公司提供的一套XML的解析的API

  • JDOM:开源组织提供了一套XML的解析的API-jdom

  • DOM4J:开源组织提供了一套XML的解析的API-dom4j

  • pull :主要应用在Android手机端解析XML

7.DOM4j的使用

首先下载jar包

Java基础进阶02-xml,java,笔记

Java基础进阶02-xml,java,笔记

xml文件

<?xml version="1.0" encoding="utf-8" ?>
<books>
    <book id="1">
        <name>语文</name>
        <versions>人教版</versions>
    </book>
    <book id="2">
        <name>数学</name>
        <versions>人教版</versions>
    </book>
    <book id="3">
        <name>数学</name>
        <versions>苏教版</versions>
    </book>
    
    <user id="1">
        <name>小明</name>
        <studentID>1235354</studentID>
    </user>
</books>

需求:

  • 解析这个xmI文件

  • 将解析到的Book标签数据封装到Book对象中并将其存储到ArrayList集合中

  • 遍历集合

解析类:

public class Analysis {
​
    public Document parseUrl(String url) throws DocumentException {
        SAXReader reader = new SAXReader();
        return reader.read(url);
    }
    public Document parseUrl(File file) throws DocumentException {
        SAXReader reader = new SAXReader();
        return reader.read(file);
    }
​
}

Book类

public class Book {
    private String name;
    private String version;
    private Long id;
​
    public Book() {
    }
​
    public Book(String name, String version, Long id) {
        this.name = name;
        this.version = version;
        this.id = id;
    }
​
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
​
    public String getVersion() {
        return version;
    }
​
    public void setVersion(String version) {
        this.version = version;
    }
​
    public Long getId() {
        return id;
    }
​
    public void setId(Long id) {
        this.id = id;
    }
​
    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", version='" + version + '\'' +
                ", id=" + id +
                '}';
    }
}

测试类

public class Application {
    public static void main(String[] args) throws  DocumentException {
​
        File file = new File("reflection\\src\\xml\\bookstores.xml");
        Analysis analysis = new Analysis();
        Document document = analysis.parseUrl(file);
​
        //获取根标签
        Element rootElement = document.getRootElement();
        //通过根标签获取book标签
        //无参elements()获取所有子标签
        List<Element> elements = rootElement.elements();
        System.out.println(elements.size());
        elements.forEach(book -> {
            System.out.println(book.getName());
        });
​
        //有参elements(标签名)可以获取所有的指定子标签
        List<Element> books = rootElement.elements("book");
        System.out.println(books.size());
​
        books.forEach(book -> {
            System.out.println("=====================================");
            //获取属性对应的属性值
            System.out.println(book.attribute("id").getValue());
            //获取该标签下的子标签
            book.elements("name").forEach(name -> {
                //获取标签体的内容
                System.out.println(name.getText());
            });
​
            book.elements("version").forEach(v -> {
                //获取标签体的内容
                System.out.println(v.getText());
            });
        });
        System.out.println("------------------------------------");
​
        //准备封装
        ArrayList<Book> bookArrayList = new ArrayList<>();
        books.forEach(book -> {
            Book book1 = new Book(book.element("name").getText(),
                                    book.element("version").getText(),
                                    Long.valueOf(book.attribute("id").getValue()));
            System.out.println(book1);
            bookArrayList.add(book1);
        });
        //最后检查"
        System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++");
        bookArrayList.forEach(book -> System.out.println(book.toString()));
​
​
​
    }
}

8.文档约束

(1)概述

用来限定xml文件中可使用的标签以及属性

(2)分类
  • DTD

  • schema

(3)DTD约束
  • 创建一个文件,后缀名为.dtd

  • 看xml文件中使用了哪些元素(<!ELEMENT>可以定义元素)

  • 判断元素是简单元素还是复杂元素

    • 简单元素:没有子元素

    • 复杂元素:有子元素的

Java基础进阶02-xml,java,笔记

Java基础进阶02-xml,java,笔记

根据上面的xml写一个DTD约束文件

<!ELEMENT books (book,user)>
<!ELEMENT book (name,version)>
<!ELEMENT user (name,studentID)>
​
<!ELEMENT studentID (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT version (#PCDATA)>

需要掌握:

  • 能在xml文件中引入dtd约束文档

  • 能够简单阅读约束文档

  • 能根据约束文档写xml文件

(4)引入约束

方式一:引入本地dtd

<?xml version="1.0" encoding="utf-8" ?>
<!--在xml文件中的第二行写入 <!DOCTYPE 根标签名字 SYSTEM(表示引入本地DTD) ‘DTD文件路径’>-->
<!DOCTYPE books SYSTEM 'restrain.dtd'>

方式二:在xml文件内部引入

<?xml version="1.0" encoding="utf-8" ?>
<!--在xml文件中的第二行写入 <!DOCTYPE 根标签名字 [](表示内部引入dtd,[]内写约束内容)>-->
<!DOCTYPE books [] >

方式三:引入网络dtd

<?xml version="1.0" encoding="utf-8" ?>
<!--在xml文件中的第二行写入 <!DOCTYPE 根标签名字 PUBLIC(表示引入网络DTD) “dtd文件名” “dtd文档的url”>-->
<!DOCTYPE books PUBLIC “dtd文件名” “dtd文档的url”>
(5)DTD语法
①定义元素
<!ELEMENT元素名 元素类型>
  • 简单元素

    • EMPTY:表示标签体为空

    • ANY:表示标签体可以为空也可以不为空

    • PCDATA:表示该元素的内容部分为字符串

  • 复杂元素

    • 直接写子元素名称。

    • 多个子元素可以使用”,“或者 ”|" 隔开;

      • ” , ":表示定义子元素的顺序

      • ”|”: 表示子元素只能出现任意一个

        • "?“:零次或一次

        • ” + ":一次或多次

        • " * ":零次或多次;

        • 如果不写则表示出现一次

②定义属性
<!ATTLIST 元素名称 属性名称 属性的类型 属性的约束>
  • 属性的类型

    • CDATA类型:普通的字符串

  • 属性的约束:

    • #REQUIRED:属性是必须的

    • #IMPLIED:属性不是必需的

    • #FIXED value:属性值是固定的value值文章来源地址https://www.toymoban.com/news/detail-824216.html

到了这里,关于Java基础进阶02-xml的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java基础篇--XML简介

    目录 什么是 XML XML 用途 XML 语法 XML文档声明 根元素 元素 属性 注释 转义字符 CDATA区 处理指令 XML的解析 开发中比较常见的解析方式有三种 DOM解析方式: SAX解析方式: PULL解析方式: 常见的解析开发包 DOM解析原理及结构模型 dom4j技术栗子 XML的约束 约束语法: 内部关联:

    2024年02月11日
    浏览(36)
  • 【Java Web学习笔记】5 - XML

    https://github.com/yinhai1114/JavaWeb_LearningCode/tree/main/xml 目录 项目代码 零、在线文档 一、XML引出 1.为什么需要XML 2.XML用于解决什么问题  3.案例 二、XML基本语法 1.基本语法 2.XML语法 - 文档说明 3.XML语法 - 元素 4.XML语法 - 属性 5.XML语法 - CDATA节 三、XML转义字符 小结 四、DOM4J 1.XML解

    2024年02月04日
    浏览(36)
  • Java基础知识篇02——Java基本语法

    定义: 就是用了保存数据的一个类型,一种数据类型,只能保存该类型数据值 作用: 只有了解数据类型,才能选择合适的类型存放数据,才能更好的利用计算机硬件资源(内存和硬盘等)。 不同的数据类型存放数据大小是不同的。 数据类型的使用方式就是用来声明一个变量,

    2024年03月15日
    浏览(66)
  • Day02 - Java基础语法

    目录 1. 注释 使用的技巧 注意点 2. 2.1 概念 2.2 第一个class 3. 字面量 区分技巧 4. 变量 4.1 什么是变量? 4.2 变量的定义格式 4.2.1 格式详解 4.2.2 常用的数据类型 4.2.3 变量的注意事项 5. 数据类型 5.1 Java语言数据类型的分类 5.2 基本数据类型的四类八种 说明 需要记忆

    2024年02月10日
    浏览(42)
  • Java基础知识篇02——封装

    大家好,我是白夜,今天给大家聊聊面向对象的三大特征——封装 先来看看我们之前写的代码结构 以上代码存在的问题 所有类写在一个目录下面,非常难管理,因为以后项目不可能只有这么几个类,当类数量很大的时候,就不容易管理了。 不能写同名但是不同需求的类。

    2024年04月12日
    浏览(45)
  • Java SE 学习笔记(十九)—— XML、设计模式

    在有些业务场景下,存储数据或者传输数据给别人的时候需要满足一定的规范进行组织 XML 的全称为(EXtensible Markup Language),是一种 可扩展 的 标记语言 ,是一种数据表示格式,可以用于自定义数据格式,可以描述非常复杂的数据结构,常用于传输和存储数据。 例如: XM

    2024年02月08日
    浏览(42)
  • 02 java ---- Android 基础app开发

    目录 相对布局 显示一个美女  显示两个美女 安卓APP启动过程 安卓布局控件 常用布局之相对布局 常用布局之相对布局 padding和margin 按键美化  常用布局之线性布局 安卓按键响应的几种方式 直接设置按键的onClick绑定的函数 自定义类实现按键监听事件的接口 匿名内部类实现

    2024年02月04日
    浏览(72)
  • java基础 -02java集合之 List,AbstractList,ArrayList介绍

    在正式List之前,我们先了解我们补充上篇Collection接口的拓展实现,也就是说当我我们需要实现一个不可修改的Collection的时候,我们只需要拓展某个类,也就是AbstractCollection这个类,他是Collection接口的骨干实现,并以最大限度的实现了减少此接口所需要的工作; 如上两图进行

    2024年01月20日
    浏览(42)
  • 【JavaEE基础学习打卡02】是时候了解Java EE了!

    📜 本系列教程适用于 Java Web 初学者、爱好者,小白白。我们的天赋并不高,可贵在努力,坚持不放弃。坚信量最终引发质变,厚积薄发。 🚀 文中白话居多,尽量以小白视角呈现,帮助大家快速入门。 🎅 我是 蜗牛老师 ,之前网名是 Ongoing蜗牛 ,人如其名,干啥都慢,所

    2024年02月12日
    浏览(48)
  • 第二章 02Java基础-数据类型、标识符、键盘录入

    今天我们学习Java基础,数据类型、标识符、键盘录入 1.数据类型大体上可以分为两类,一类是基本数据类型,另外一类是引用数据类型。今天我们学习基本数据类型。 2.基本数据类型可以分为四类八种,整数(byte short int long)、浮点数(float double)、字符(char)和布尔(

    2024年02月06日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包