• XML语法、约束


    Dom4J解析XML、Xpath检索XML

    XML概述

    XML是可扩展标记语言(eXtensible Markup Language)的缩写,它是是一种数据表示格式,可以描述非常复杂的数据结构,常用于传输和存储数据。

    <?xml version="1.0" encoding="UTF-8"?>
    <data>
        <sender>张三</sender>
        <receiver>李四</receiver>
        <src>
        	 <addr>北京</addr>
        	 <date>2022-11-11 11:11:11</date>
        </src>
        <current>武汉</current>
        <dest>广州</dest>
    </data>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    XML的特点
    一是纯文本,默认使用UTF-8编码;二是可嵌套;

    XML的使用场景
    XML内容经常被当成消息进行网络传输,或者作为配置文件用于存储系统的信息;


    XML的语法

    XML文件的后缀名为:xml;

    第一行是文档声明

    <?xml version="1.0" encoding="UTF-8" ?>
    
    version:XML默认的版本号码、该属性是必须存在的
    encoding:本XML文件的编码
    
    • 1
    • 2
    • 3
    • 4

    XML的标签(元素)规则

    XML可以自定义标签。

    1.标签由一对尖括号和合法标识符组成: <name></name>,必须存在一个根标签,有且只能有一个;
    2. 标签必须成对出现,有开始,有结束: <name></name>
    3. 特殊的标签可以不成对,但是必须有结束标记,如:<br/>
    4.标签中可以定义属性,属性和标签名空格隔开,属性值必须用引号引起来<student id = “1”></name>
    5.标签需要正确的嵌套;

    XML的注释
    XML文件中可以定义注释信息:<!– 注释内容 -->

    XML转义字符

    &lt;    <  小于
    &gt;    >  大于
    &amp;   &  和号
    &apos;  '  单引号
    &quot;  "  引号
    
    • 1
    • 2
    • 3
    • 4
    • 5

    XML文件中可以存在CDATA区

    <![CDATA[   …内容…  ]]>
    
    • 1

    严格来说,在XML中只有”<”和”&”是非法的,其它三个都是可以合法存在的,但是,把它们都进行转义是一个好的习惯,也可以使用<![CDATA[]]>来包含不被xml解析器解析的内容。

    但需要注意:
    1.此部分不能再包含”]]>”;
    2.不允许嵌套使用;
    3.]]>这部分不能包含空格或者换行;

    代码示例

    <?xml version="1.0" encoding="UTF-8" ?>
    <!-- 注释:根标签有且仅能有一个 -->
    <student>
        <name>女儿国王</name>
        <sex></sex>
        <hobby>唐僧,追唐僧</hobby>
        <info>
            <age>30</age>
            <addr>女儿国</addr>
        </info>
        <sql>
            select * from user where age &lt; 18;
            select * from user where age &lt; 18 &amp;&amp; age > 10
            <![CDATA[
                    select * from user where age < 18
            ]]>
        </sql>
    </student>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    XML约束

    什么是文档约束
    由于XML文件可以自定义标签,导致XML文件可以随意定义,程序在解析的时候可能出现问题,因此可以对XML进行写作规范限制。

    文档约束的分类
    1.DTD
    2.schema

    DTD约束

    编写DTD约束文档,后缀必须是.dtd,在需要编写的XML文件中导入该DTD约束文档即可,然后按照约束的规定编写XML文件的内容。

    缺点
    不能约束具体的数据类型。

    代码示例
    data.dtd

    <!ELEMENT 书架 (书+)>
    <!ELEMENT  (书名,作者,售价)>
    <!ELEMENT 书名 (#PCDATA)>
    <!ELEMENT 作者 (#PCDATA)>
    <!ELEMENT 售价 (#PCDATA)>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    test.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE 书架 SYSTEM "data.dtd">
    <书架>
        <>
            <书名>精通JavaSE加强</书名>
            <作者>dlei</作者>
            <!-- DTD约束不能约束数据类型 -->
            <售价>很贵</售价>
        </>
        <>
            <书名></书名>
            <作者></作者>
            <售价></售价>
        </>
        <>
            <书名></书名>
            <作者></作者>
            <售价></售价>
        </>
    </书架>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    schema约束

    schema可以约束具体的数据类型,约束能力上更强大,schema本身也是一个xml文件,本身也受到其他约束文件的要求,所以编写的更加严谨。
    在这里插入图片描述
    schema的使用
    1.编写schema约束文档,后缀必须是.xsd;
    2.在需要编写的XML文件中导入该schema约束文档;
    3.按照约束内容编写XML文件的标签;

    代码示例
    data.xsd

    <?xml version="1.0" encoding="UTF-8" ?>
    <schema xmlns="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://www.itcast.cn"
            elementFormDefault="qualified" >
        <!-- targetNamespace:申明约束文档的地址(命名空间)-->
        <element name='书架'>
            <!-- 写子元素 -->
            <complexType>
                <!-- maxOccurs='unbounded': 书架下的子元素可以有任意多个!-->
                <sequence maxOccurs='unbounded'>
                    <element name=''>
                        <!-- 写子元素 -->
                        <complexType>
                            <sequence>
                                <element name='书名' type='string'/>
                                <element name='作者' type='string'/>
                                <element name='售价' type='double'/>
                            </sequence>
                        </complexType>
                    </element>
                </sequence>
            </complexType>
        </element>
    </schema>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    test.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <书架 xmlns="http://www.itcast.cn"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.itcast.cn data.xsd">
        <!-- xmlns="http://www.itcast.cn"  基本位置
             xsi:schemaLocation="http://www.itcast.cn books02.xsd" 具体的位置 -->
        <>
            <书名>神雕侠侣</书名>
            <作者>金庸</作者>
            <售价>399.9</售价>
        </>
        <>
            <书名>神雕侠侣</书名>
            <作者>金庸</作者>
            <售价>19.5</售价>
        </>
    
    </书架>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    Dom4J解析XML、Xpath检索XML

  • 相关阅读:
    C++ replace,replace_if和replace_copy函数用法详解(深入了解,一文学会)
    【前端】Vue+Element UI案例:通用后台管理系统-代码总结
    iOS自动化生成ipa的脚本
    网页布局常用的8种布局方式
    开源组件与中间件的学习笔记3
    洛谷算法题解:Bear and Bowling
    【problem】解决idea提示Method breakpoints may dramatically slow down debugging
    linux开发板中的数据存储和读取操作
    使用 Apache Camel 和 Quarkus 的微服务(四)
    [ROS2系列] ubuntu 20.04测试rtabmap 3D建图(二)
  • 原文地址:https://blog.csdn.net/weixin_52341477/article/details/125543806