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 ‘中國‘ >
&nbsp; &lt; &gt; &copy; &quot;
在外部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/>
> &gt; < &lt; & &amp; " &quot; ‘ &apos;
屬性要使用引号括起來。 可以是雙引号或者單引号都可以,但是要保持一緻。
實體引用都會被忽略,把整個資料當作一塊文本資料來看待。 格式<! [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(屬性名稱,屬性值);//添加屬性