首页 > 其他 > 详细

XML概述

时间:2014-05-15 20:14:25      阅读:534      评论:0      收藏:0      [点我收藏+]

前言

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的区别


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

 

XML的优点


 1.XML简化了数据的传输
 2.XML简化了数据的共享
 3.XML简化了平台的变更


XML的语法


 文件的后缀.xml
 <关键字>标签体</关键字>
 关键字大小写敏感
 <!--注释 -->

 

 格式良好的XML文档


  1.XML文档的第一行必须有声明
  2.关键字不能以数字下划线开始,可以包涵数字下划线字母
  3.关键字不能以XML/Xml/xml/开始
  4.标签要合理嵌套
  5.标签要成对出现,单标签要正确结束
  6.属性要以键值对的形式出现,属性值要用""或者‘‘引起来
  7.有且仅有一对根标签

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


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


 DTD(Document type Definition,文档类型定义)


  定义XML的语法规范


    XML文档定义引入DTD


  1.内部DTD(定义声明在XML文档内部)
  2.外部DTD(定义声明DTD在XML文档的外部)
   DTD文件的后缀名.dtd

  内部定义:
   <!DOCTYPE 根标签 [DTD语法]>
  外部DTD引入
   <!DOCTYPE 根标签 SYSTEM "DTD文件的路径">

 

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

 

  DTD  定义元素


  <!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  ‘中国‘ >


  实体


   &nbsp; &lt; &gt; &copy; &quot;


  自定义实体


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

 
 Schema


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


 DTD的不足


  1.数据类型有限
  2.不可扩展
  3.不支持命名空间
  4.DTD的语法与XML的语法形式不同

 Schema的语法


  schema 文档后缀 .xsd

  
  书写一个schema文件

  xml声明
  <?xml version="1.0" encoding="utf-8"?>
  书写schema的根标签
  <xs:schema
   定义一个命名空间的别名(别名xs 别名所代表的命名 http://www.w3.org/2001/XMLSchema
   xmlns:xs="http://www.w3.org/2001/XMLSchema"
   定义当前文档的命名空间
   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 version="1.0" encoding="utf-8"?>

  书写XML根标签
  <my:class
   根标签的引用命名空间
   xmlns:my="guopeihaoren"
   定义命名空间xsi的命名空间值
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   定义当前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类型


   
   1.简单类型对值进行约束

 

   <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属性值


   
   2.简单类型中的列表类型


    <!--设置列表类型
    <xs:list itemType="xs:int"></xs:list>
    -->


   3.简单类型中的联合类型


   
   <!--联合类型 同时引用多个简单类型  实现取值多样化,简单类型名称之间以空格隔开-->


   <xs:element name="class" type="testSimple"></xs:element>
   
   <xs:simpleType name="testSimple">
    <xs:union memberTypes="str digital"></xs:union>
   </xs:simpleType>

   <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>
   
   <xs:simpleType name="digital">
    <xs:restriction base="xs:int">
     <xs:pattern value="\d{3}"></xs:pattern>
    </xs:restriction>
   </xs:simpleType>

  
  复杂数据类型


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


    <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>


   2.子元素间没有顺序


   <!--定义多个 子元素没有先后顺序-->
   <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>


   
   3.多者选其一


   <!--定义多个子元素中取其一-->
   <xs:complexType name="com3">
    <xs:choice >
      <xs:element name="student1"  type="str"></xs:element>
         <xs:element name="student2"  type="digital"></xs:element>
    
    </xs:choice>
   </xs:complexType>


   4.定义属性


   <!--定义属性-->
   <xs:complexType name="com4">
    <xs:attribute name="name" type="xs:int" use="required"></xs:attribute>
      use属性 :optional  属性是可选的
         required  必须的
         prohibited 属性禁止设置

      fixed  : 设置属性固定值
      default:设置属性的默认值
   </xs:complexType>

   5.设置子元素同时还有属性


   <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:attribute name="name" type="xs:int" use="required"></xs:attribute>
   </xs:complexType>
   


   6.设置父元素中含有子元素同时含有文本


    通过mixed="true"属性设置混合
   <xs:complexType name="com2" mixed="true">
    <xs:all >
     <xs:element name="student1"  type="str"></xs:element>
     <xs:element name="student2"  type="digital"></xs:element>
    </xs:all>
    <xs:attribute name="name" type="xs:int" use="required"></xs:attribute>
   </xs:complexType>

 

   7.通过simpleContent 约束复杂类型的内容的形式


   <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:complexType>
   
   <xs:complexType name="com5">
    <xs:simpleContent>
     base属性设置元素的内容类型
     <xs:restriction base="">
     </xs:restriction>
    </xs:simpleContent>
   </xs:complexType>

  
   
  8.创建元素组

 

 

9.创建属性组

 

  

 

dtd代码示例:

 

1. struts.xml配置文件

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

 

schema代码示例:

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

2.classSchema.xsd

 

 

总结

元素


1.  开始标记和结束标记以及标记之间内容.
  2.xml文件是一个树状结构,元素有一个"根部",然后  在扩展"枝叶".
3.  xml文件是包括一个单一元素中,这个元素我们称之为  "根元素"。根元素是必须的。
4.  元素的规则:  元素大小写敏感。  元素要正确嵌套。  元素要关闭。  空元素:标记之间没有内容。称之为空元素.  可以简写<desc/>  


实体引用


    >  &gt;    <   &lt;    &   &amp;    "   &quot;    ‘   &apos;
 

属性


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


CDATA类型数据(特殊标签)


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


注释


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


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


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


    
DTD 


    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


   Schema 和DTD 都是用来描述XML文件结构。DTD无法解决名称冲突的问题,    所以Schema出现了,支持命名空间(解决不同来源的DTD标记相同的问题)。
   Schema使用的是XML语法(自身就是XML),xml也称作自描述语言。   Schema文件的扩展xsd.   Schema名词:     复杂元素(有子元素的元素)      简单元素(叶子元素)

 

java  API解析XML文件

 


   解析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(属性名称,属性值);//添加属性
       
    

XML概述,布布扣,bubuko.com

XML概述

原文:http://blog.csdn.net/z929118967/article/details/25873611

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!