Java

XML

2018-12-17  本文已影响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>
上一篇 下一篇

猜你喜欢

热点阅读