Xml培训笔记

前端之家收集整理的这篇文章主要介绍了Xml培训笔记前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
6月18号
Xml:(可扩展的标记语言)
 是一个可扩展的标记语言是SGML的子集
 用于存储数据和交换数据。实现数据的共享。
Xml中涉及的技术有:
 验证,约束:DTD/Schema
 转换:XSL XSLT
 查询:XPath
 链接:XLink XPointer
 解析:DOM/SAX

回顾HTML:
 1、根元素<html> 事实可以有多个根元素
 2、一个元素可以不写结束标签。
 3、属性的值可以不是用引号引起来
 4、标签是不区分大小写的
 5、标签的嵌套很随意。(交叉嵌套)
 6、html标签没有特定的语义,只关注表现形式。

XML:
 SGML ==》 HTML(显示数据)
    两者 ==》XML(存储数据,交换数据)
 经常被使用在应用的配置文件中。

语法:
Xml声明:<?xml version="1.0" encoding="utf-8" standalone="yes"?>
Xml处理指令:
 例如:<?xml-stylesheet type="text/css" href="" ?>
文档类型定义:
 <!DOCTYPE 根元素 SYSTEM 文件路径>
XML文档注释:
 <!-- -->

XML元素:
 有且只能有一个根元素 
元素命名规则:
1、只能使用字母(包含中文),下划线开头。
2、后面可以是中文,字母,数字,_,-,.(点号)
3、元素名不能有空格 和 :冒号
4、名称区分大小写
5、元素名称建议不要使用xml开头

6、元素中的属性必须使用“”
7、同一元素中不能同名属性
8、元素的属性值中不能出现><&符号
9、元素必须有结束标签

实体:
预订义实体:<(<) >(>) &(&) "(") '(,)
自定义实体

元素内容分类:
 1、PCDATA :纯字符数据(不包含<) 会被xml解析器解析
 2、CDATA :一段字符快。。其中的字符快仅仅表示字符,不会被xml解析器解析。
 	语法:<![CDATA[......]]>

xml解析器:
 非验证解析器:只查看xml文档的是否规则
 验证解析器:还要查看xml文档是否有效(满足特定的约束和规范)

DTD:Document Type Definition 文档类型定义
-----------------------------------------
 可以定义:
 	1、元素
	2、元素之间的关系
	3、元素中的属性
 	4、实体以及符号
DTD是xml的模板,对xml进行约束
DTD可以被定义在xml文档内部,也可以定义成一个独立的文档
 内部DTD:<!DOCTYPE 根元素 [定义的内容]>
 外部DTD:
	1、创建独立的dtd文件(*.dtd)
	2、在xml中引入
	 <!DOCTYPE 根元素 SYSTEM "dtd文件路径">
 内外部DTD:
	<!DOCTYPE 根元素 SYSTEM "dtd文件路径" [内部dtd]> 

内部:
-----
元素的定义:<!ELEMENT 元素名 元素类型>
--------
元素类型:EMPTY ANY #PCDATA 纯元素类型 混合类型
元素的修饰:+ * ? () |,例如:
<!DOCTYPE 诗 [
<!ELEMENT 诗 (作者,标题,内容) >
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 标题 (#PCDATA)>
<!ELEMENT 内容 (#PCDATA)>
] >

外部:
<!DOCTYPE 诗 SYSTEM "xml15.dtd" >

<!ELEMENT 诗 (作者,内容) >
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 标题 (#PCDATA)>
<!ELEMENT 内容 (#PCDATA)>

属性的定义
----------
语法:<!ATTLIST 元素名 属性属性的类型 属性的特点>
属性的类型:
CDATA(纯字符数据) 
ID(值不能以数字开头 具有唯一性)
IDREF(值要来自于其它ID的值)
IDREFs(值要来自于其它ID的值,引用多个ID的值) 用空格隔开
NMTOKEN 是CDATA 的一个子集,表示属性值必须是英文字母、数字、句号、破折号、下划线或冒号(不能有空格!)。
NMTOKENS 多个用空格隔开
Enumerated:枚举 <!ATTLIST person 性别 (男|女) #required>

实体分类:普通实体和参数实体
ENTITY:实体 ---普通实体
 定义:内部实体:<!ENTITY 实体名 实体值>
   	外部实体:<!ENTITY 实体名 SYSTEM "路径URL">  //FF不支持
   使用实体:&实体名;
ENTITIES:多个

参数实体定义:
 内部实体:<!ENTITY % 实体名 实体值>
    使用:%实体名;
 外部实体:<!ENTITY % 实体名 SYSTEM "URL">
使用范围:在能在独立的DTD或者属性中 

NOTATION
属性特点:
#required(必须的) 
#IMPLIED(可选的)
<!ATTLIST 人 name CDATA #required 学历 CDATA #IMPLIED>
#FIXED (固定的) <!ATTLIST 宠物 age CDATA #FIXED "12">
默认值: <!ATTLIST 宠物 sex CDATA  "公">

命名空间NameSpace
----------
命名空间:避免命名冲突

<book mxlns:people="http://www.wangwei.com">
	<title>西游记</title>
	<author>
		<name>吴承恩</name>
		<people:title people:pay="130000">小说家</people:title>
	</author>
</book>

Schema:
-------------
 1、它是xml的模板
 2、它本身的格式基于xml

Schema特点:
 1、基于xml格式
 2、支持大量的数据类型,且能过自定义数据类型。(类型能够与数据库类型保持一致)
 3、支持命名空间

在schema中,元素可以分为两大类
 1、复合元素:包含子元素或者属性的元素
 2、简易元素:即没有子元素也没属性元素
Schema中定义简易元素的语法:
 <element name="" type="元素的内容类型">
 常见的类型:string decimal integer boolean date time

复合元素:
 1、只包含子元素的元素 <xx><aa></aa></xx>
 2、只包含属性的空元素 <xx bb="aa">
 3、只包含属性和文本的元素 <aa bb="cc"></aa>
 4、即包含子元素也包含属性的元素 <aa cc="dd"><bb></bb></aa>
 5、包含文本和子元素的元素 <aa> bb <cc> dd </cc> </aa>
复合元素--案例:
---------------
<element name="products"> <!-- 包含属性的元素 -->
<complexType> <!-- 标识当前元素的一个复合元素 -->
<sequence> <!-- 指示子元素出现的顺序 -->
<element name="product">
<complexType>
	<attribute name="id" type="integer" use="optional"></attribute>
</complexType>
</element>
 			
<element name="address">  <!-- 包含属性和文本的元素 -->
<complexType>
	<simpleContent><!-- 表示此元素的内容是一个简单文本内容 -->
	<extension base="string"> <!-- base是写元素内容类型 -->
	<attribute  name="zip" type="integer"></attribute>
	</extension>
	</simpleContent>
</complexType>
</element>
<element name="suppliy"> <!-- 有属性和子元素的元素 --> <!--先定义元素后定义属性-->
<complexType>
	<sequence>
	<element name="proaddress" type="string" ></element>
	</sequence>
	<attribute name="name" type="string" use="required"></attribute> <!-- use属性默认可选的 -->
<attribute name="num" type="integer"></attribute>
</complexType>
</element>

<element name="customer"> <!-- 有文本和子元素的元素 -->
	<complexType mixed="true"> <!-- 指元素内容是混合的,默认是false -->
	<sequence>
	<element name="name" type="string"></element>
	</sequence>
	</complexType>
</element>
</sequence>
</complexType>
</element>
---------------------------------
属性:
default:默认的
fixed:固定
use:默认是可选的  required 必须的

对元素类型的限制:
------------------
<element name="people">
 <complexType>
  <sequence>
   <element name="age">
    <simpleType> <!-- 当前元素是一个简易类型 -->
     <restriction base="integer"> <!-- 内容的类型 -->
      <minInclusive value="5"></minInclusive> //最大值包括在内的
      <maxInclusive value="25"></maxInclusive>
     </restriction>
    </simpleType>
   </element>
  <complexType>
 <sequence>
</element>

<enumeration value="法拉利"></enumeration> <!-- 列举一些列的值 -->
<enumeration value="兰博基尼"></enumeration>
<enumeration value="宝马"></enumeration>

<pattern value="s[a-z]+"></pattern> <!-- 模式约束 -->

<length value="6"></length> <!-- 限制长度 -->

<minLength value="2"></minLength>
<maxLength value="6"></maxLength>
指示器:
-------------
有七种指示器:
Order 指示器【顺序指示器】
All:任意顺序
Choice:多选一个
Sequence 使用的顺序必须和定义的顺序保持一致
Occurrence 指示器:【定义元素出现的频率】
maxOccurs:默认一次
minOccurs;默认一次  maxOccurs="unbounded" //出 现 次 数 不 受 限 制
//出现在sequence指示器下面
案例:<element name="猫" type="string" minOccurs="1" maxOccurs="3"></element>
Group 指示器:
Group name:
attributeGroup name
=========================================================================
CSS:层叠样式表
 可以用在html中也可以用在xml中
 html中引用外部css样式表:<link rel="stylesheet" type="text/css" href="">
 XMl中引用外部css样式表: <?xml-stylesheet type="text/css" href="person.css"?>

XSL:(Extensible StyleSheets Language)可扩展的样式表语言(*.xsl)
  还包含:XSLT(xml文档转化) XPATH(xml文档导航语言) XML-FO(xml文档格式化)

XSL模板
节点选择语句<xsl:value-of select="匹配模式"> //取出xml文件中被选择的元素或者属性内容
	<xsl:value-of select="模式"> //获取指定节点的值	
	<xsl:value-of select="@属性名"> //获取指定属性的值

//遍历该文档的所有子节点
循环语句<xsl:for-each select="唐诗/五言绝句" order-by="-作者"> 
 order-by 需要草案空间,草案空间FF不支持
 order-by 默认是升序(+) 降序(-);

条件判断语句<xsl:if test="条件">
主要有三种情形:
 1、条件:元素名称 <xsl:if test="元素名称"> 判断当前是否是该元素
 2、条件:元素名称=值 <xsl:if test="元素名称='值'"> 判断当前元素是否是该指定的值
 3、条件:属性名称=值 <xsl:if test="属性名称='值'">判断当前元素的莫个属性是否是指定的值

多条件判断语句<xsl:choose>
<xsl:choose>
 <xsl:when test="">
 </xsl:when>
 <xsl:when test="">
 </xsl:when>
 ............
 <xsl:otherwise>
 </xsl:otherwise>
</xsl:choose>

排序语句<xsl:sort>
<xsl:apply-templates select="roster/student">
	<xsl:sort select="score" order="descending"/>
</xsl:apply-templates>
注意:<xsl:sort>只能出现在<xsl:apply-templates>和<xsl:fro-each>元素中

XSL中定义一个模板(函数定义)
<xsl:template match="匹配模式">  匹配模式:XPath 路径:用于匹配到XML中的莫个节点
调用一个模板(函数调用)
<xsl:apply-templates select="模式">   //select可以省略
select没有省略:会去调用与select中写的模式相对应的模板
<!-- apply-templates中select属性不写,则会调用当前元素下的所有子元素 -->

============================
XML解析:
主要方式有:DOM JDOM dom4j SAX
使用DOM解析时:需要将整个文档预先加载。(适合小文键处理)
使用SAX解析时:基于事件,不需要加载整个文档

猜你在找的XML相关文章