xml 笔记:(一)

xml简介:

eXtensible Markup Language 简写 xml(可扩展标记型语言)
xml语言是具有结构性的标记语言,  可以灵活的存储一对多的数据关系。
xml用途:
	可以用于显示数据
	储存数据(主要功能)	

xml文件组成部分

  • 文档声明
    什么是文档声明?
    • 在编写文档时,需要先使用文档声明xml文档。且必须出现文档的第一行。是个硬性规定。
      <?xml version='1.0' encoding='UTF-8'?>

      <!--xml 表示标签的名字 version 当前文件版本号 encoding 当前编码  standalone 标记此文档是否独立 例如 standalone="yes" 或者no-->
      

- 元素
什么是元素?

  • xml中的元素其实就是一个个的标签
    标签分为两种:

  • 包含标签体

    <person>
        <name>冯nuo</name>
        <age>18</age>
    </person>
    
  • 不包含标签体

    <person
        name="冯nuo"
        age = "18"
    />
    

标签书写规范

  • 严格区分大小写;

  • 只能以字母或下划线开头;abc _abc

  • 不能以xml(或XML、Xml等)开头

  • 名称字符之间不能有空格或制表符;

  • 名称字符之间不能使用冒号 :
    元素属性
    注意事项:

  • 一个元素可以有多个属性,每个属性都有它自己的名称和取值。

  • 属性值一定要用引号(单引号或双引号)引起来。

  • 属性名称的命名规范与元素的命名规范相同

  • 元素中的属性是不允许重复的

  • 在XML技术中,标签属性所代表的信息也可以被改成用子元素的形式来描述

    <?xml version="1.0" encoding="UTF-8"?>
    <persons>
    <person name="冯nuo" age="18" />
    <person>
        <name>冯nuo</name>
        <age>18</age>
    </person>
    </persons>
    
  • 注释
    格式:

    • (注释不能嵌套定义)
  • CDATA区
    为什么要使用CDATA区域?

    • 如果我们在标签中写入的内容, 想要带有标签的标记符号的话, 就需要对这段内容进行转义
      写法:<![CDATA[ 内容 ]]>
  • 特殊字符

  • PI指令(处理指令)
    可以在xml设置样式

    <?xml-stylesheet type="text/css" href="css的路径"?>

    注意:设置样式,只能对英文标签名称起作用,对于中文的标签名称不起作用的。

xml的约束
为什么需要约束

  • 打个比方,一个文件中保存的是个关于人的相关信息,在没有约束的情况下可定义非人类属性特征的信息,在编译的时候不会报错,但不符合常理,xml的标签是自定义的,需要技术来规定xml中只能出现的元素,这个时候需要约束。
  • xml约束技术:dtd约束 schema约束

DTD
什么是DTD?

  • DTD(Document Type Definition),文档类型定义,用来约束XML文档。例如要求xml文档的根元素必须是,在元素下可以包含0~n个元素,每个元素必须有一个number属性,而且还要有三个子元素,分别为、、,这三个子元素的内容必须为文本内容,而不能是子元素。

代码:

<!-- persons元素中可以包含1~n个student元素 -->
<!ELEMENT persons (student+)>
<!-- person元素中必须包含name、age、sex元素,而且顺序也是固定的 -->
<!ELEMENT person (name,age,sex)>
<!-- name元素内容为文本,即字符串 -->
<!ELEMENT name (#PCDATA)>
<!-- age元素内容为文本 -->
<!ELEMENT age (#PCDATA)>
<!-- sex元素内容为文本 -->
<!ELEMENT sex (#PCDATA)>

xml文件中引入DTD文件:

格式:  <!DOCTYPE persons SYSTEM "路径名">   (以上文person为例)

	引入了写好的DTD文件后,格式就必须跟DTD文件保持一致。

语法细节

在DTD文档中声明xml元素使用ELEMENT关键字

语法: <!ELEMENT 元素名称 使用规则>

使用规则:
	(#PCDATA):只元素的主体内容只能是普通的文本
   		  EMPTY:用于指示元素的主体为空
	   ANY:用于指示元素的主体内容为任意类型。
	(子元素):指示元素中包含的子元素	

定义子元素及描述他们的关系:

	1.如果子元素用逗号分开,说明必须按照声明顺序去编写XML文档。
	2.如果子元素用"|"分开,说明任选其一。
	3.用+、*、?来表示元素出现的次数
		 如果元素后面没有+*?:表示必须且只能出现一次
		 +:表示至少出现一次,一次或多次
		 *:表示可有可无,零次、一次或多次
		?:表示可以有也可以无,有的话只能有一次。零次或一次

在xml文档中指定内部DTD
还是以人类为例代码演示

<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<!DOCTYPE persons [
<!ELEMENT persons (person+)>
<!ELEMENT person (name, age, sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
]>
<persons>
	<person>
		<name>冯nuo</name>
		<age>18</age>
		<sex>nan</sex>
	</person>
</persons>

在XML文档中指定外部公共DTD

格式:

<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD网址">

DTD属性定义

在DTD文档中使用ATTLIST关键字来为一个元素声明属性
	属性定义格式:
	<ATTLIST 元素名
		属性名1 属性值类型  设置说明
		属性名2 属性值类型  设置说明
			…………
	>

属性类型:

  • CDATA : 属性值为任意文本数据
  • Enumerated :属性值必须是枚举列表中的一个
  • ID : 属性值必须是唯一的,并且属性值不能以数字开头
    设置说明
    • #REQUIRED:表示该属性必须出现
    • #IMPLIED: 表示该属性可有可无
    • #FIXED:表示属性的取值为一个固定元值。语法 #FIXRD"固定值"
      直接值:表示属性的取值为该默认值

schema

schema是什么:
XML文档的约束,用来代替DTD。
DTD文档不是xml语法,而上车吗本身也是xml文档,这对解析器来说不用再去处理非xml的文档了
DTD只能表述平台线束,而schema本身也是xml,所以可以描述结构化的约束信息。
DTD不只约束元素或属性的类型,但Schema可以。例如让age属性的取值在0~100之间。
Schema文档的扩展名为xsd(XML Schema Definition)。

<?xml version="1.0"?>
<!-- schema文档的根元素,其中xmlns是与名称空间相关的东西,先不用理会它,只需要照着写就行了 -->
<xsd:schemaxmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <!-- 新建一个元素,名字为person,这个元素的类型为personsType,这个类型在下面创建的。-->
	<xsd:element name="persons" type="personsType"/>
   <!-- 新建一个复杂类型,名为personsType类型,这个类型为复杂类型 -->
	<xsd:complexType name="personsType">
      <!-- 这个类型里面包含的子元素是需要有顺序的 -->
		<xsd:sequence>
         <!-- personsType只有一个子元素,名为student,类型为personType,在父元素中可以出现0~N次。-->
			<xsd:element name="person" type="personType" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>
   <!-- 新建一个复杂类型,类型名为personType -->
	<xsd:complexType name="personType">
      <!-- personType中的子元素是要求顺序的 -->
		<xsd:sequence>
         <!-- personType类型中第一个子元素名为name,类型为字符串 -->
			<xsd:element name="name" type="xsd:string"/>
			<xsd:element name="age">
            <!-- age的类型是简单类型 -->
				<xsd:simpleType>
               <!-- 这个类型是通过对整型的约束而扩展的,约束内容为最小值为0;最大值为100-->
					<xsd:restriction base="xsd:integer">
						<xsd:maxInclusive value="100"/>
						<xsd:minInclusive value="0"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
         <!-- sex元素 -->
			<xsd:element name="sex">
            <!-- 简单类型 -->
				<xsd:simpleType>
               <!-- 通过对字符串类型约束扩展而来的类型,约束内容为枚举列表:男、女 -->
					<xsd:restriction base="xsd:string">
						<xsd:enumeration value="男"/>
						<xsd:enumeration value="女"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
		</xsd:sequence>
      <!-- 为student类型声明属性number,类型为字符串 -->
		<xsd:attribute name="number" type="xsd:string"/>
	</xsd:complexType>
</xsd:schema>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值