zoukankan      html  css  js  c++  java
  • java 之 xml

    一、xml的应用
    *不同的系统之间传输数据
    *用来表示生活中有关的数据
    *经常用来配置文件
    二、xml的语法
    (1)xml的文档声明
    *创建一个文件 后缀名(.xml)
    *第一步:创建后必须要有一个文档声明,这个声明必须是第一行
    **<?xml version="1.0" encoding="gbk" standalone="yes"?>
    属性:
    version: xml的版本1.0 和 1.1 高版本不能像低版本兼容
    encoding:xml编码 gbk utf-8 iso8859(不包含中文)
    standalone:表示是否是独立文件,是否需要依赖其他文件 yes或no
    *xml的中文乱码问题解决
    若是通过文件创建修改后缀名,输入内容后进行保存文件(此时这个文件默认的编码是gbk),而内容中encoding='utf-8',这样打开后就乱码了
    (2)定义元素
    *标签定义有开始必须要有结束<myTip></myTip>
    *标签中没有内容,可以在标签内结束<myTip/>
    *标签可以嵌套
    *在xml中把空格和换行抖当成那内容来解析 下面案例两端代码是不一致的
    ** <myTip>123</myTip>

    <myTip>
    123
    </myTip>
    *xml代码区分大小写
    *xml标签不能以数字和下划线开头
    *标签不能以xml,XML,Xml等开头 不正确案例:<xmla>等
    *标签不能包含空格和冒号
    (3)定义属性
    *xml是标记型文档也可以有属性(html也是标记型文档有属性) 例如:<person id1="123" id2="hah"></person>
    *在同一个标签中属性名称不能重复
    *属性之使用""包起来
    *xml属性名称规范和定义元素规范是一致的
    (4)注释
    *写法:<!-- -->
    (5)特殊字符
    * 特殊字符 代码符号
    & &amp;
    < &lt;
    > &gt;
    " &quot;
    ' &apos;
    (6)CDATA区(了解)
    *例如 <b>if(a<b && b<c && d>f)</b>这儿需要转义的太多,如果把这内容放到CDATA区,那么就不需要转义了
    *写法:<![CDATA[ 内容 ]]> 例如:<![CDATA[<b>IF(A>B && B<C){}</b>]]> 
    *这里是不需要将特殊符号进行转义,CDATA当成了文本内容,不是标签
    (7)PI指令(处理指令)(了解)
    *可以在xml中设置样式
    *写法:<?xml-stylesheet type="text/css" href="hah.css"?>
    *设置样式:只能对英文标签起作用,中文名不行
    三、xml的约束DTD
    案例:若只想写person只包含name,age,然后又写了phone,但是我们需要约束除了name,age外,其他都不能写
    *xml约束技术:dtd约束和schema约束
    (1)dtd入门
    *创建一个文件,后缀名(.dtd)
    *通过xml判断出现多少元素(分为简单元素【没有子元素】,复杂元素【有子元素】)就在<!ELEMENT 元素>
    *简单元素:<!ELEMENT name (#PCDATA)>
    *复杂元素:<!ELEMENT person (name,age)>
    *在xml文件中引用:<!DOCTYPE 根元素【注:例如person是根元素】 SYSTEM "文件名.dtd路径">
    *xml通过浏览器打开,浏览器只是效验xml语法,不负责效验约束,若想效验xml约束,需要使用工具例如eclips
    (2)dtd引入的三种方式
    *引入外部的dtd
    <!DOCTYPE 根元素 SYSTEM "dtd文件路径">
    *内部使用dtd
    语法:<!DOCTYPE 根元素 [
    <!ELEMENT person (name,age)>........等<!ELEMENT age (#PCDATA)>
    ]>
    *使用网络上的dtd文件
    <!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档的URL">
    后面会学到框架 struts2 使用配置文件 使用外部的dtd文件
    (3)使用dtd定义元素
    *语法:<ELEMENT 元素名 约束>
    *简单元素:<!ELEMENT name (#PCDATA)>
    **(#PCDATA):约束name是字符串类型
    **EMPTY:元素为空(没有内容).
    语法:<!ELEMENT 元素名 EMPTY> 案例:<!ELEMENT name EMPTY> <name></name>
    **ANY:用于制定元素内容可以使用任意数据类型 案例:<!ELEMENT name ANY> <name>123</name>
    *复杂元素:<!ELEMENT person (name,age)> 【注:当这么写时,name只能再元素中出现一次 案例:<name>hah</name>】
    **逗号隔开:表示必须按照声明顺序去编写xml文档 案例:<name>hah</name><age></age>
    **竖线隔开:表示任选其一 语法:<!ELEMENT person (name|age)> 案例:<name></name>
    *不同符号表示子元素出现的次数
    *‘+’符号:表示一次或者多次 语法: <!ELEMEENT person (name+,age)> 案例:<name>hah</name><name>hah2</name>
    *‘?’符号:表示零次或者一次 语法:<!ELEMENT person (name?,age)>
    *‘*’符号:表示零次或者多次 语法:<!ELEMENT person (name*,age)>
    (4)dtd定义属性
    *语法:<ATTLIST 元素名称
    属性名称 属性类型 属性的约束
    >
    *属性类型:
    *CDATA:字符串
    *枚举: 案例:(aa|bb|cc)【用此内容替代CDATA就是这样的写法,在使用时,属性值必须是aa,bb,cc值之一】
    *ID:值只能是字母或下划线开头
    *属性约束:
    * #REQUIRED:该属性必须出现
    * #IMPLIED:属性可有可无
    * #FIXED:表示固定值 写法: #FIXED "AAA" 【注:属性的值必须是“AAA”】
    * 默认值:根据语法规则,若不对属性赋值,那么就是默认值 语法案例:CDATA "WWW",若对属性赋值了,则取的就是赋的值

    (5)实体的定义
    *语法:<!ENTITY 实体名称 “实体的值”>
    *案例<!ENTITY TEST "HAHAHA"
    *使用案例:&实体名称; 例如: &TEST; <name>&TEST;</name>
    *注意:定义实体需要写在内部dtd里面,如果写在外部的dtd里面,在某些浏览器下,内容得不到
    四、xml的解析简介
    *xml是标记型文档
    *js使用dom解析标记型html文档?
    *根据html的层级结构,在内存中分配一个树形结构,把html的标签,属性和文本都封装成对象
    *document对象,element对象,属性对象,文本对象,Node节点对象
    *xml的解析方式:dom和sax
    *dom解析方式优缺点:注:根据xml层级结构在内存中分配一个树形结构,把xml标签,属性,文本都封装成对象
    *缺点:解析xml时,若果文件过大,造成内存溢出
    *优点:很方便实现增删改操作
    *sax解析及方式优缺点:注:使用事件驱动,边读边解析,从上到下一行一行解析,解析到某一个对象,就把对象名称返回
    *优点:使用sax不会造成内存溢出,实现查询
    *不能实现增删改操作
    工具:针对dom和sax方式的解析器,通过api提供
    *sun公司:提供jaxp
    *dom4j组织:提供dom4j(***实际开发中***)
    *jdom组织:jdom(dom4j包含了jdom)
    w3cSchool训练题
    
    -----------------------dtd文件---------
    <?xml version="1.0" encoding="UTF-8"?>
    <!ELEMENT TVSCHEDULE (CHANNEL+)>
    <!ELEMENT CHANNEL (BANNER,DAY+)>
    <!ELEMENT BANNER (#PCDATA)>
    <!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>
    <!ELEMENT HOLIDAY (#PCDATA)>
    <!ELEMENT DATE (#PCDATA)>
    <!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)>
    <!ELEMENT TIME (#PCDATA)>
    <!ELEMENT TITLE (#PCDATA)>
    <!ELEMENT DESCRIPTION (#PCDATA)>
    
    <!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>
    <!ATTLIST CHANNEL CHAN CDATA #REQUIRED>
    <!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>
    <!ATTLIST TITLE RATING CDATA #IMPLIED>
    <!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>
    
    
    
    ------------------------根据dtd文档在xml中写出格式
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE person SYSTEM "hah.dtd">
    <TVSCHEDULE NAME="AAA">
       <CHANNEL CHAN="BBB">
          <BANNER>1111</BANNER>
          <DAY>
              <DATE>2222</DATE>
              <HOLIDAY>3333</HOLIDAY>
              <PROGRAMSLOT VTR="CCC">
                  <TIME>4444</TIME>
                  <TITLE RATING="DDD" LANGUAGE="EEE">555</TITLE>
                  <DESCRIPTION>6666</DESCRIPTION>
              </PROGRAMSLOT>
          </DAY>
       </CHANNEL>
    </TVSCHEDULE>
  • 相关阅读:
    关于权限控制
    关于<!DOCTYPE>
    Oracle恢复目录的管理使用简要
    绑定变量介绍
    重做日志时间戳说明
    UNDO表空间监控说明
    Oracle rac进阶管理专家指导系列文档
    延迟块清除介绍
    ORA12500内存耗尽一例
    undo自动调优介绍
  • 原文地址:https://www.cnblogs.com/zmztya/p/8525538.html
Copyright © 2011-2022 走看看