XML

作者: 强某某 | 来源:发表于2018-12-17 15:31 被阅读5次

    xml

    文档声明(必须再第一行)

    -- 简单声明
    <?xml version="1.0"?>
    -- 简单声明1
    <?xml version="1.0" encoding="utf-8"?>
    -- 简单声明2(代表是否是独立文件和外部无关系)
    <?xml version="1.0" encoding="utf-8" standalone="no"?>
    

    标签

    1. 文档下的第一个元素为根标签
    2. 空标签(一般配合属性使用)
    <info/>
    

    属性定义

    <name id="123">张三</name>
    

    CDATA(内部东西会被解析器忽略)

     <desc><![CDATA[<a href="www.baidu.com"/>]]></desc>
    

    XML解析

    一个xml可以引用多个schema约束,但是只能引用一个DTD约束

    DOM解析

    会把整个dom读取内存在,形成树状结构.整个文档称之为Document对象,属性对应Attribute对象,所有节点元素对应Element对象,文本也可以称为Text对象,以上所有对象统称Node节点。对于大文件操作可能内存溢出,可以对文档进行增删操作

    SAX(simple api for xml)解析

    基于事件驱动,读取一行,解析一行。内存消耗小,只能查询不能增删

    XML的约束(以下只是泛泛而谈,深入看文档)

    DTD

    DTD语法自成一派,可读性差,解析慢

    stus.dtd
    <?xml version="1.0" encoding="UTF-8"?>
    <!--内部stu只能有一个 -->
    <!--<!ELEMENT stus (stu)>-->
    <!--内部stu可以有多个,+ 一个或多个,?是0个或1个, *代表0个或多个-->
    <!ELEMENT stus (stu)+>
    <!-- 内部name,age是有顺序的-->
    <!ELEMENT stu (name,age)>
    <!-- 两个当中选一个-->
    <!-- <!ELEMENT stu (name|age)>-->
    <!ELEMENT name (#PCDATA)>
    <!-- (#PCDATA)代表内容为字符元素 -->
    <!ELEMENT age (#PCDATA)>
    <!--定义属性 -->
    <! ATTLIST stu id CDATA #IMPLIED>
    
    
    stus.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 引入dtd约束xml -->
    <!-- 引入网络文件  
    
    <!DOCTYPE stus PUBLIC "//UNKNOWN/" "unknown.dtd">
     -->
    
    <!-- 引入本地文件 -->
    <!DOCTYPE stus SYSTEM  "stus.dtd">
    
    <!-- 内嵌DTD -->
    <!-- <!DOCTYPE stus[
        <!ELEMENT stus (stu)>
        <!ELEMENT stu (name,age)>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT age (#PCDATA)>
    ]> -->
    
    <stus>
        <stu id="122">
            <name >张三</name>
            <age>18</age>
        </stu>
        <stu id="122">
            <name >张三</name>
            <age>18</age>
        </stu>
    </stus>
    

    Schema

    DTD的继承者,使用xml语法,解析方便,为了替代DTD(但是没成功,因为阅读性差,编码多)

    stus.xsd
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- xmlns: xml namespace 命令空间 elementFormDefault:元素的格式化情况 targetNamespace:目标空间,下面这些元素都与这个目标空间绑定 -->
    <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/stus"
        elementFormDefault="qualified">
    
    
        <element name="stus">
        <!-- 声明stus是复杂元素 -->
            <complexType>
            <!-- stu节点最大出现的次数 ,同理还有最少出现次数,还有一些其他值快捷键提示即可-->
                <sequence maxOccurs="2">
                    <element name="stu">
                        <!-- 声明stu是复杂元素 -->
                        <complexType>
                            <sequence>
                                <!-- 以下两个是简单元素 -->
                                <element name="name" type="string"></element>
                                <element name="age" type="int"></element>
                            </sequence>
                        </complexType>
                    </element>
                </sequence>
            </complexType>
        </element>
    </schema>
    
    
    stus.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- xmlns:xsi  这里值是固定的,必须这样写
    xmlns  对应stus.xsd中的targetNamespace值
    
    
    xsi:schemaLocation="{namespace} {location}"
    注意中间有空格
    中对应的namespace则是xmlns的值
    location是xsd文件对应的路径
     -->
    <stus
    xmlns="http://www.example.org/stus"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.example.org/stus stus.xsd"
    >
        <stu>
            <name >张三</name>
            <age>18</age>
        </stu>
        <stu>
            <name >张三</name>
            <age>18</age>
        </stu>
    </stus>
    

    相关文章

      网友评论

        本文标题:XML

        本文链接:https://www.haomeiwen.com/subject/ffhckqtx.html