• XML文档


    XML文档

    XML文档的作用

    • 可以用来保存数据
    • 可以用来做配置文件
    • 可以作为数据传输的载体

    XML文档的定义

    xml文档的声明
    <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
    

    version:用来解析XML使用什么版本的解析器用来解析

    encoding:解析XML采用的编码

    standalone:该文档是否会关联其他文档,yes:是一个独立的文档。no:表示依赖其他文档

    标签的定义
    • <>括起来的都叫做元素,元素是成对出现的
    • 文档声明下来的第一个元素叫做根标签
    • 标签里面可以嵌套标签,空标签既是开始也是结束标签,一般配合属性来使用
    • 标签可以自定义
      • 自定义标签名称可以包含字符、数字以及其他的字符
      • 自定义标签不能以数字或者标点符号开始
      • 名称不能以“xml”开始,且名称不能包含空格
    • 便签中的属性
      • 定义在元素里面,<元素名称 属性名称=“属性的值”></元素名称>

    XML解析

    xml解析其实就是获取元素里面的字符数据或者属性数据

    DOM解析,document object model把整个xml全部读到内存中,形成树桩结构。整个文档称之为document对象。属性对应Attribute对象,所有的元素节点对应Element对象,文本也可以称之为Text对象那个,以上所有对象都称之为Node节点,如果xml特别大,那么将会造成内存溢出,可以对文档进行增删操作

    SAX解析:Simple API for xml基于事件驱动,读取一行,解析一行,不会造成内存溢出,不可用进行增删,只能查询

    使用dom4j进行解析需要添加如下依赖:

    <dependency>
        <groupId>dom4j</groupId>
        <artifactId>dom4j</artifactId>
        <version>1.6.1</version>
    </dependency>
    

    编写一个xml文档

    <?xml version="1.0" encoding="utf-8"?>
    <persons>
        <person>
            <name>张三</name>
            <age>23</age>
        </person>
        <person>
            <name>李四</name>
            <age>24</age>
        </person>
    </persons>
    

    编写 xml文档解析的代码

    public static void main(String[] args) throws DocumentException {
    
        ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
        URL resource = contextClassLoader.getResource("person.xml");
    
        SAXReader saxReader=new SAXReader();
        Document document = saxReader.read(resource);
        //得到根元素
        Element rootElement = document.getRootElement();
        //获取根元素下面的所有子元素
        List<Element> elements = rootElement.elements();
        //遍历所有的
        for (Element element : elements) {
            System.out.println(element.element("name").getText());
            System.out.println(element.element("age").getText());
           // System.out.println(element.element("address").getText());
        }
    
    }
    

    XML约束

    XML约束是用来规范约束一个XML文档的书写规范

    DTD约束
    <?xml version="1.0" encoding="UTF-8" ?>
    <!--引入dtd来约束这个xml-->
    <!--方式一-->
    <!--文档类型  跟标签名字 网络上的dtd dtd的名称 dtd的路径-->
    <!--<!DOCTYPE stus PUBLIC "//unknown/" "unknown.dtd">-->
    <!--方式二-->
    <!--引入本地的DTD :跟标签名称 引入本地的DTD dtd的位置-->
    <!--<!DOCTYPE stus SYSTEM "stus_copy.dtd">-->
    
    <!--方式三-->
    
    <!DOCTYPE stus [
            <!ELEMENT stus (stu)>
            <!ELEMENT stu (name,age,address)>
            <!ELEMENT name (#PCDATA)>
            <!ELEMENT age (#PCDATA)>
            <!ELEMENT address (#PCDATA)>
            ]>
    
    
    <stus>
        <stu >
            <name>张三</name>
            <age>23</age>
            <address>北京</address>
        </stu>
        <stu>
            <name>李四</name>
            <age>24</age>
            <address>上海</address>
        </stu>
    </stus>
    

    stus_copy.dtd

    <!ELEMENT stus (stu)>
    <!ELEMENT stu (name,age,address)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
    <!ELEMENT address (#PCDATA)>
    
    Schema约束

    语法复杂,功能比较强大

    Schema其实就是一个xml,使用xml的语法规则,xml解析器 解析起来比较方便,Schema约束文本内容比DTD内容还要多,没有真正意义替代DTD

    约束文档:

    
    
        <!-- xmlns  :  xml namespace : 名称空间 /  命名空间
        
        targetNamespace :  目标名称空间 。 下面定义的那些元素都与这个名称空间绑定上。 
        
        elementFormDefault : 元素的格式化情况。  -->
        
        <schema xmlns="http://www.w3.org/2001/XMLSchema" 
        
            targetNamespace="http://www.baidu.com/teacher" 
        
            elementFormDefault="qualified">
    
    
    ​        
    
            <element name="teachers">
        
                <complexType>
        
                    <sequence maxOccurs="unbounded">
        
                        <!-- 这是一个复杂元素 -->
        
                        <element name="teacher">
        
                            <complexType>
        
                                <sequence>
        
                                    <!-- 以下两个是简单元素 -->
        
                                    <element name="name" type="string"></element>
        
                                    <element name="age" type="int"></element>
        
                                </sequence>
        
                            </complexType>
        
                        </element>
        
                    </sequence>
        
                </complexType>
        
            </element>
        
        </schema>
    
    
    
    实例文档:
    
        <?xml version="1.0" encoding="UTF-8"?>
        
        <!-- xmlns:xsi : 这里必须是这样的写法,也就是这个值已经固定了。
        
        xmlns : 这里是名称空间,也固定了,写的是schema里面的顶部目标名称空间
        
        xsi:schemaLocation : 有两段: 前半段是名称空间,也是目标空间的值 , 后面是约束文档的路径。
        
         -->
        
        <teachers
        
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        
            xmlns="http://www.baidu.com/teacher"
        
            xsi:schemaLocation="http://www.itheima.com/teacher teacher.xsd"
        
        >
        
            <teacher>
        
                <name>zhangsan</name>
        
                <age>19</age>
        
            </teacher>
        
            <teacher>
        
                <name>lisi</name>
        
                <age>29</age>
        
            </teacher>
        
            <teacher>
        
                <name>lisi</name>
        
                <age>29</age>
        
            </teacher>
        
        </teachers>
    
    
    

    一个xml如果想指定它的约束规则, 假设使用的是DTD ,那么这个xml只能指定一个DTD , 不能指定多个DTD 。 但是如果一个xml的约束是定义在schema里面,并且是多个schema,那么是可以的。简单的说: 一个xml 可以引用多个schema约束。 但是只能引用一个DTD约束。

    名称空间的作用就是在 写元素的时候,可以指定该元素使用的是哪一套约束规则。 默认情况下 ,如果只有一套规则,那么都可以这么写

  • 相关阅读:
    Python
    Python
    Jmeter 学习路线
    Git 学习路线
    数据库学习路线
    Linux 学习路线
    Gitlab(2)- centos7.x 下安装社区版 Gitlab 以及它的配置管理
    云原生学习路线(仅供参考)
    Python
    Python
  • 原文地址:https://www.cnblogs.com/haizhilangzi/p/12310749.html
Copyright © 2020-2023  润新知