XML

XML

  • XML 指的是可扩展标记语言(EXtensible Markup Language)
  • XML 是一种标记语言,很类似 HTML
  • XML 的设计宗旨是传输数据,而不是显示数据
  • XML 标签没有被预定义。您需要自行定义标签
  • XML 被设计为具有自我描述性
  • XML 是 W3C 的推荐标准

HTML与XML

  • XML 不是 HTML 的替代
  • XML 和 HTML 为不同的目的而设计
  • XML 被设计是为传输存储数据,其焦点是在数据的内容
  • HTML 被设计的是用来显示数据,其焦点是数据的外观
  • HTML 旨在显示信息,而 XML 旨在传输信息
  • HTML 语法比较松散,XML 语法是严格的
  • HTML 所有标签都是预先定义好的,使用固定的标签,展示不同的内容
  • XML 当中的标签都是自己定义的
  • XML用处
    • 1.数据存储
    • 2.配置文件
    • 3.数据传输

XML基本语法

我使用的开发工具是 IntelliJ IDEA 创建一个普通的 Java 工程就行,创建一个以 .xml 结尾的文件。

文档声明

  • 必须写在文档的第一行

关于文档声明第一行标签中的属性介绍:

  • version:版本号,固定1.0
  • encoding:指定文档的编码表,默认iso-8859-1
  • standalone:指定文档声明是否独立 yes 或 no,是否可以引用其它文件的意思

编写规则

  • 所有 XML 元素都必须有关闭标签
  • XML 标签对大小写敏感
  • XML 必须正确地嵌套
  • XML 文档必须有根元素
  • XML 的属性值必须加引号
<?xml version="1.0" encoding="UTF-8" ?>
<book>
    <authon>BNTang</authon>
    <price>6666</price>
</book>

🐤实体引用

在 XML 中,有一些字符拥有特殊的意义,如果你把字符 "<" 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。这样会产生 XML 错误,为了避免这个错误,请用实体引用来代替 "<" 字符。

5 个预先定义好的实体引用符:

  • &lt; 小于 <
  • &gt; 大于 >
  • &amp; 和号 &
  • &apos; 单引号 '
  • &quot; 引号 "
<?xml version="1.0" encoding="UTF-8" ?>
<book>
    <authon>BNTang &gt;</authon>
    <price>6666</price>
</book>

命名规则

  • 名称可以包含字母,数字以及其他字符
  • 名称不能以数字或者标点符号开始
  • 名称不能以字符xml做标签名称
  • 名称不能包含空格

其他的我就不校验了,自行测试即可,比较简单,有时候你不想里面的内容被解析,不需要转义,里面的数据原样显示,这个时候就可以使用 <![CDATA[数据内容]]> 标签来实现。

<?xml version="1.0" encoding="UTF-8" ?>
<book>
    <authon>BNTang</authon>
    <price>6666</price>
    <![CDATA[
        Hello BNTang
    ]]>
</book>

关于属性的声明,属性值必须使用引号引起,单引号双引号都行:

<?xml version="1.0" encoding="UTF-8" ?>
<team>
    <person id="1001">
        <name>BNTang</name>
        <gender>男</gender>
    </person>
    <person id="1002">
        <name>IT6666</name>
        <gender>女</gender>
    </person>
</team>

在浏览器页面显示的效果如下:

XML约束

  • 规定文档当中只能写哪些标签。并且会给一些提示

约束分类

DTD约束

  • 内部 DTD:在 xml 当中定义的 dtd
  • 外部 dtd:在外部文件当中单独定义的 dtd

如果是自己定义的 DTD 文件是以 .dtd 结尾的,下面我给出了一个示例如下:

本地:<!DOCTYPE 名称 SYSTEM "student.dtd">
<!DOCTYPE student SYSTEM "student.dtd">

student.dtd 内容如下:

<!ELEMENT students (student*) >
<!ELEMENT student (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST student number ID #REQUIRED>

  • 引入之后你会发现语法已经严格的规定好了,不能乱写了
  • 如下我在给出一个 Servlet 的 DTD 供参考用:
<!ELEMENT web-app (servlet*,servlet-mapping*,wel-file-list?)>
<!ELEMENT servlet (servlet-name,description?,(servlet-class|jsp-file))>
<!ELEMENT servlet-name (#PCDATA)>
<!ELEMENT wel-file-list (welcome-file+)>
网络上的约束:<!DOCTYPE students PUBLIC "命名空间" "student.dtd">
  • 网上约束和本地差不多只是约束文件的地址不一样而已

约束语法

存在的问题

  • 在标签当中存放的内容不知道是什么类型,写的都是汉字,这种约束不严谨

schema约束

  • 复杂标签:标签当中还有子标签
  • 简单标签:标签当中没有子标签了

约束语法

  • type:起的别名
  • complexType name="students" sequence element name="" minOccur 相当于 dtd 的 *
  • simpleTyle restriction base="xsd:string" 限制简单标签当中的数据类型
  • student.xsd 内容如下:
<?xml version="1.0"?>
<xsd:schema xmlns="http://www.it6666.top/xml"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://www.it6666.top/xml" elementFormDefault="qualified">
    <xsd:element name="students" type="studentsType"/>
    <xsd:complexType name="studentsType">
        <xsd:sequence>
            <xsd:element name="student" type="studentType" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="studentType">
        <xsd:sequence>
            <xsd:element name="name" type="xsd:string"/>
            <xsd:element name="age" type="ageType"/>
            <xsd:element name="sex" type="sexType"/>
        </xsd:sequence>
        <xsd:attribute name="number" type="numberType" use="required"/>
    </xsd:complexType>
    <xsd:simpleType name="sexType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="male"/>
            <xsd:enumeration value="female"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="ageType">
        <xsd:restriction base="xsd:integer">
            <xsd:minInclusive value="0"/>
            <xsd:maxInclusive value="256"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="numberType">
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="it_\d{4}"/>
        </xsd:restriction>
    </xsd:simpleType>
</xsd:schema> 

schema约束分析

使用过程

  • 如下:

<?xml version="1.0" encoding="UTF-8"?>
<students xsi:schemaLocation="http://www.it6666.top/xml student.xsd"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns="http://www.it6666.top/xml">
    <student number="it_0001">
        <name>aa</name>
        <age>50</age>
        <sex>male</sex>
    </student>
</students>
posted @ 2020-09-13 23:33  BNTang  阅读(148)  评论(0编辑  收藏  举报