天天看点

XML概述前言正文总结

1.xml  eXtensible  markup   language 可扩展标记语言

2.xml作用:  a.交互数据;  b.保存数据;  c.配置文件

3.xml和html

1)  html  超文本标记语言:  a.数据展示和用户体验.;  b.标记是固定的。

2)  xml 可扩展标记语言;  a.数据本身。  b.标记可扩展,可以自定义。

4.xml解析  1.xml解析器  2.浏览器  3.myeclipse

5.xml 文件的声明

  <?xml version="1.0" encoding="GBK" ?>  version:文件版本号  encoding:文件编码格式

XML(Extensible Markup Language,可扩展标记语言)  一种用来存储和传输数据的元语言(  元语言:一种定义了与其他特定领域有关的,结构化的,语义化的语法语言).

  HTML由W3C规范和定义  ;XML可由用户自定义;  XML定义和规范了HTML

 1.XML简化了数据的传输

 2.XML简化了数据的共享

 3.XML简化了平台的变更

 文件的后缀.xml

 <关键字>标签体</关键字>

 关键字大小写敏感

 <!--注释 -->

  1.XML文档的第一行必须有声明

  2.关键字不能以数字下划线开始,可以包涵数字下划线字母

  3.关键字不能以XML/Xml/xml/开始

  4.标签要合理嵌套

  5.标签要成对出现,单标签要正确结束

  6.属性要以键值对的形式出现,属性值要用""或者‘‘引起来

  7.有且仅有一对根标签

 浏览器默认校验XML是否是格式良好的

 有效的XML = 格式良好的XML+DTD/Schema语法校验

  定义XML的语法规范

  1.内部DTD(定义声明在XML文档内部)

  2.外部DTD(定义声明DTD在XML文档的外部)

   DTD文件的后缀名.dtd

  内部定义:

   <!DOCTYPE 根标签 [DTD语法]>

  外部DTD引入

   <!DOCTYPE 根标签 SYSTEM "DTD文件的路径">

注:  使用XMLSPY软件来校验XML的有效性

  <!ELEMENT 元素名称  (元素类型)>

   #PCDATA 所有字符数据

   ANY     表示任何数据

   EMPTY   不能含有任何内容

   <!ELEMENT book (title)>   只含有一个子元素的纯元素

   <!ELEMENT book (title,author)> 多个子元素有出现的先后顺序用逗号分隔

   <!ELEMENT book (title|author)>  多个用|分隔 只能取其一 相当于or

   <!ELEMENT book (title+,author)>  +表示元素可出现至少一次

   <!ELEMENT book (title?,author)>  ?表示0次或者一次

   <!ELEMENT book (title*,author)>  * 表示任意次数

   <!ELEMENT book (title*,(author1|author))>

   <!ELEMENT firstname  (#PCDATA|author)*>  元素中可以包含子元素和文本的混合

   <!ELEMENT firstname  (#PCDATA|author|author1)*>

   <!ATTLIST 元素名称  属性名称  属性值的类型   属性特性>

 1. 属性值类型

      CDATA   所有字符数据

      NMTOKEN(name token)  是CDATA的子集 不能包涵"<"">" ,不能包含空格

      NMTOKENS 是CDATA的子集,不能包涵"<"">"  能包含空格

      ID       属性值为当前标签的唯一标识,不能是纯数字,不能以数字开始

      IDREF    属性值只能是其他ID类型的值

      IDREFS   属性值同时引用多个ID类型的值,多个值之间用空格隔开

2.     属性特点

       #REQUIRED  必须出现

       <!ATTLIST   title   name    CDATA   ‘hello‘  >  设置属性不出现并且设置默认值

       #IMPLIED   可选的

       #FIXED    固定值

3.例子:       <!ATTLIST   title   name    CDATA   #FIXED  ‘中国‘ >

     < > © "

   在外部DTD中<!ENTITY   实体名称  ‘实体表示内容‘ >

   在XML中  &实体名称;

  是xml中一种用来定义约束XML文档结构的语法规范

  1.数据类型有限

  2.不可扩展

  3.不支持命名空间

  4.DTD的语法与XML的语法形式不同

  schema 文档后缀 .xsd

  xml声明

  <?xml version="1.0" encoding="utf-8"?>

  书写schema的根标签

  <xs:schema

   定义一个命名空间的别名(别名xs 别名所代表的命名 )

   xmlns:xs=""

   定义当前文档的命名空间

   xmlns="guopeihaoren"

   目标XML文档引用的命名空间

   targetNamespace="guopeihaoren"

   当前定义的元素是否纳入当前命名空间的规范

   elementFormDefault="qualified"

   当前定义的属性是否纳入命名空间的规范

   attributeFormDefault="unqualified"

    值:qualified  纳入命名空间的规范

        unqualified 不纳入命名空间的规范

  >

  定义一个元素

  <xs:element name="class" type="xs:int"></xs:element>

  </xs:schema>

  书写目标XML文件

  XML声明

  书写XML根标签

  <my:class

   根标签的引用命名空间

   xmlns:my="guopeihaoren"

   定义命名空间xsi的命名空间值

   xmlns:xsi=""

   定义当前XML文档所引用的schema文件的路径:命名空间  schema文件名

   xsi:schemaLocation="guopeihaoren classSchema.xsd"

  >123</my:class>

  定义元素

  <xs:element></xs:element>

   属性:name   定义标签名称

         type   定义元素体的取值类型

         maxOccurs 当前元素在父标签中的最大出现次数

         minOccurs 当前元素在父标签中最小出现的次数

         default  设置元素的默认值

         fixed    设置元素的固定取值

   属性type取值:  基本数据类型、简单数据类型、复杂数据类型

  xs:string   xs:int   xs:boolean  xs:double  xs:date  xs:time

  xs:decimal  任意精度类型

   <xs:simpleType name=""></xs:simpleType>

   <xs:element name="class" >

    <xs:simpleType >

     <xs:restriction base="xs:int">

      <xs:maxExclusive value="100"></xs:maxExclusive>

     </xs:restriction>

    </xs:simpleType>

   </xs:element>

   嵌入式:元素不能设置type属性

    simpleType 不能设置name 属性

   <xs:element name="class" type="testSimple"></xs:element>

   simpleType name 属性:标识当前simpleType类型

   <xs:simpleType name="testSimple">

    规范简单类型的取值的约束  base属性:简单类型取的基本类型的值

    <xs:restriction base="xs:decimal">

       <!--设置取值的上限不包含边界

    <xs:maxExclusive value="100"></xs:maxExclusive>

    设置取值的下限不包含边界

    <xs:minExclusive value="90"></xs:minExclusive>

    设置取值的上限包含边界

    <xs:maxInclusive value="100"></xs:maxInclusive>

    设置取值的下限包含边界

    <xs:minInclusive value="90"></xs:minInclusive>

    设置数字类型的最大位数

    <xs:totalDigits value="3"></xs:totalDigits>

    设置小数点后的小数最大位数,注意只能在xs:decimal这种类型下设置

    <xs:fractionDigits value="3"></xs:fractionDigits>

    设置字符串的精准长度

    <xs:length value="4"></xs:length>

    设置字符串的最大长度

     <xs:maxLength value="5"></xs:maxLength>

    设置字符串的最小长度

     <xs:minLength value="3"></xs:minLength>

    多个取其一

    <xs:enumeration value="big"></xs:enumeration>

    <xs:enumeration value="middle"></xs:enumeration>

    <xs:enumeration value="small"></xs:enumeration>

    采用正则表达式校验

    <xs:pattern value="(13|14|15|18)\d{9}"></xs:pattern>

    对于空白字符的处理方式

    <xs:whiteSpace value="collapse"></xs:whiteSpace>

    -->

   </xs:restriction>

   </xs:simpleType>

   元素的type属性设置成simpleType 的name属性值

    <!--设置列表类型

    <xs:list itemType="xs:int"></xs:list>

    <xs:union memberTypes="str digital"></xs:union>

   <xs:simpleType name="str">

    <xs:restriction base="xs:string">

     <xs:enumeration value="china"></xs:enumeration>

     <xs:enumeration value="usa"></xs:enumeration>

    </xs:restriction>

   <xs:simpleType name="digital">

    <xs:restriction base="xs:int">

     <xs:pattern value="\d{3}"></xs:pattern>

    <xs:complexType name="com1">

     定义子元素出现的先后顺序

     <xs:sequence maxOccurs="unbounded" minOccurs="1">

      子元素在父元素中出现的次数

      (要以一个整体形式出现 )

      <xs:element name="student1"  type="str"></xs:element>

      <xs:element name="student2"  type="digital"></xs:element>

     </xs:sequence>

    </xs:complexType>

   <!--定义多个 子元素没有先后顺序-->

   <xs:complexType name="com2">

    <xs:all >

     <xs:element name="student1"  type="str"></xs:element>

     <xs:element name="student2"  type="digital"></xs:element>

    </xs:all>

   </xs:complexType>

   <!--定义多个子元素中取其一-->

   <xs:complexType name="com3">

    <xs:choice >

         <xs:element name="student2"  type="digital"></xs:element>

    </xs:choice>

   <!--定义属性-->

   <xs:complexType name="com4">

    <xs:attribute name="name" type="xs:int" use="required"></xs:attribute>

      use属性 :optional  属性是可选的

         required  必须的

         prohibited 属性禁止设置

      fixed  : 设置属性固定值

      default:设置属性的默认值

    通过mixed="true"属性设置混合

   <xs:complexType name="com2" mixed="true">

   <xs:complexType name="com5">

    <xs:simpleContent>

     base属性设置元素的内容类型

     <xs:extension base="str">

      <xs:attribute name="name" type="digital" use="required"></xs:attribute>

     </xs:extension>

    </xs:simpleContent>

     <xs:restriction base="">

1. struts.xml配置文件

2.struts.dtd是针对struts.xml配置文件写的约束

1.classXml.xml 测试schema的配置文件

2.classSchema.xsd

1.  开始标记和结束标记以及标记之间内容.

  2.xml文件是一个树状结构,元素有一个"根部",然后  在扩展"枝叶".

3.  xml文件是包括一个单一元素中,这个元素我们称之为  "根元素"。根元素是必须的。

4.  元素的规则:  元素大小写敏感。  元素要正确嵌套。  元素要关闭。  空元素:标记之间没有内容。称之为空元素.  可以简写<desc/>  

    >  >    <   <    &   &    "   "    ‘   '

    属性要使用引号括起来。    可以是双引号或者单引号都可以,但是要保持一致。  

    实体引用都会被忽略,把整个数据当作一块文本数据来看待。    格式<! [CDATA[文本数据]]>

    <!--注释的内容-->

 11."格式良好"的xml

    遵守正确语法的xml文件被称为"格式良好"的xml。

    需要遵守的规则:    a.xml文件必须要有根元素。    b.xml文件的标记必须正确关闭。    c.xml文件标记大小写敏感。    d.xml文件属性要有引号括起来。    e.xml文件标记必须要正确嵌套。

    Document  Type   Definition 文档定义类型    定义xml文件结构,和xml文件标记的规则。   DTD文件可以定义在XML文件中,也可以定义在XML文件外部

1.   DTD类型:

     PUBLIC(行业公用的)     SYSTEM(小范围自定义的)

2.   DTD中定义规则 

     *表示出现0-n次     #PCDATA表示字符串      +表示出现1-n次      |表示或者(phone|mobile) 只能出现一个     ?表示出现0-1次

   ATTLIST  标记名称  属性名  类型

   标记名称  id  CDATA #REQUIRED 表示属性是必须的

   标记名称  id  CDATA  #IMPLIED 表示属性不是必须的

  标记名称   hot  CDATA  "false"  表示hot的默认值是false 如果定义了

  值就取定义的值,如果没有定义 就取默认值 false

   Schema 和DTD 都是用来描述XML文件结构。DTD无法解决名称冲突的问题,    所以Schema出现了,支持命名空间(解决不同来源的DTD标记相同的问题)。

   Schema使用的是XML语法(自身就是XML),xml也称作自描述语言。   Schema文件的扩展xsd.   Schema名词:     复杂元素(有子元素的元素)      简单元素(叶子元素)

   解析xml方式:

      a.DOM (Document  Object  Model)

         优点:把xml文件放到内存中为一个树状结构,可以遍历和修改节点。

         缺点:当文件比较大的时候,内存压力比较大,读写速度慢。

      b.SAX(Simple API  for XML)

       把xml文件做为一个流,当触发标记开始、标记内容开始、标记结束这些动作。

      优点:可以马上开始,速度快,没有内存压力

      缺点:不能修改节点

   JDOM/DOM4J 这是目前市场上比较流行的两种方式

   DOM4J 结合了DOM和SAX两种解析方式的优点。  

   DOM4J API写  XML文件

     常用API方法:

       addElement(节点名称);//添加元素

       setText(字符串);//给元素添加值

       addAttribute(属性名称,属性值);//添加属性