1. 程式人生 > >JavaWeb學習筆記之XML(1)

JavaWeb學習筆記之XML(1)

文章目錄


相關知識: https://blog.csdn.net/mokexfdgh/article/category/8092196


XML

表單提交方式

提交方式:

	<form id="form1">
	<input type="text" name="username" />
	<!-- 第一種submit -->
<input type="submit" /> <!-- 第二種button --> <input type="button" value="提交" onclick="form1();" /> <script type="text/javascript"> function form1(){ var form1 = document.getElementById("form1"); form1.action = "hello.html"; form1.submit(); } </script> <!-- 第三種超連結 -->
<a href="hello.html?username=123456">提交</a> </form>

輸入項常用的事件屬性:
onclick:滑鼠點選事件
onchange:改變內容(一般在select使用)
onfocus:得到焦點
onblur:失去焦點

	<input type="text" id="id1" name="test" value="please input" onfocus="focus1();" onblur="blur1();" />
	<script type="text/javascript">
function focus1(){ var input1 = document.getElementById("id1"); input1.value = ""; } function blur1(){ var input1 = document.getElementById("id1"); input1.value = "please input"; } </script>

XML的介紹

xml:eXtensible Markup Language(可擴充套件標記型語言)
與hmtl都是標記型語言,可以使用標籤操作,而xml的標籤可以自己定義,且可以使用中文標籤
用途:可以與html一樣用於顯示資料,還可以儲存資料(主要)

XML的應用

適用場景:
1.不同的系統之間傳輸資料
 早期訊息的傳輸是直接使用字串,可讀性差且不利於維護
2.用來表示生活中有關係的資料
3.檔案配置(連線資料庫時修改資料庫的資訊只需要修改配置檔案)

XML的語法

1.xml的文件宣告(必須要有,用於表示寫的時xml的內容)
 檔案的字尾名為.xml

	<?xml version="1.0" encoding="gbk" ?>

 屬性:version:版本號,encoding:xml的編碼,standalone:文件是否獨立或依賴其它檔案(yes/no)
 注:必須寫在第一行第一列
2.定義元素(標籤)
標籤命名規則:
 ①可以是中文
 ②xml程式碼區分大小寫
 ③不能以數字,下劃線,xml,XML,Xml開頭
 ④不能包含空格或者冒號

	<person></person>//有開始有結束
	<aa/>//標籤沒有內容
	<a><b></b></a>//標籤的巢狀

 注:只能有一個根標籤,其它標籤都在根標籤中,同時xml中的空格和換行都會被當成內容來解析
3.定義屬性
屬性定義的要求:
 ①一個標籤上可以有多個屬性
 ②屬性名稱不能相同,且命名規則同標籤的定義規則
 ③屬性和屬性值之間同html一樣
4.註釋:寫法和html一樣(不能巢狀)
5.特殊字元:需要轉義,和html一樣
6.CDATA區
用途:可以解決多個字元都需要轉義的操作
語法:

	<![CDATA[ 內容 ]]>

7.PI指令
用途:用來指揮軟體如何解析XML文件,可以在xml設定樣式
語法:

	<?xml-stylesheet type="text/css" href="css的路徑"?>

注:只對英文標籤名稱起作用,而對中文標籤不起作用

XML的dtd約束

由於xml的標籤是自定義的,所以有可能回出現不屬於此標籤的子標籤的出現,所以需要約束xml中只能出現的元素
兩種約束的技術:dtd約束和schema約束
注:瀏覽器只會負責開啟xml檔案並校驗xml語法,不負責校驗約束.要校驗xml的約束,需要使用myeclipse工具.

用法:
 ①建立一個字尾名為.dtd的檔案
 ②xml中有多少個元素就在dtd檔案中寫幾個<!ELEMENT>
 ③判斷元素是簡單元素(沒有子元素)還是複雜元素(有子元素)
  簡單元素:<!ELEMENT 元素名 (#PCDATA)>
  複雜元素:<!ELEMENT 元素名稱 (子元素)>
 ④xml頁面引入dtd檔案(三種方式)

	<!DOCTYPE 根元素名稱 SYSTEM "dtd檔案的路徑"><!-- 使用外部的dtd檔案 -->
	<!DOCTYPE 根元素名稱 [
		<!ELEMENT 元素名 (#PCDATA)>
		<!ELEMENT 元素名稱 (子元素)> 
	]><!-- 使用內部的dtd檔案(寫在xml中) -->
	<!DOCTYPE 根元素 PUBLIC "DTD名稱" "DTD文件的URL"><!-- 使用網路上的dtd檔案 -->

dtd檔案的使用規則(元素的定義):
簡單元素:<!ELEMENT 元素名 約束>
(#PCDATA):約束該元素是字串型別
EMPTY:元素為空(沒有內容)
ANY:任意內容
複雜元素:<!ELEMENT 元素名稱 (子元素名1,子元素2,…)>
子元素名+:該子元素可以出現一次或多次,預設只能出現一次
子元素名?:該子元素可以出現零次或者一次
子元素名*:該子元素可以出現零次或多次
注:
xml中的子元素的順序必須和dtd檔案中子元素名的順序一樣//(子元素名1,子元素2,…)
xml中的子元素只能出現dtd檔案中子元素的任意一個//(子元素名1|子元素2|…)

dtd定義元素的屬性:
語法:

	<!ATTLIST 元素名稱
		屬性1名稱 屬性型別 屬性的約束
		屬性2名稱 屬性型別 屬性的約束
		...
	>

屬性型別:
 ①CDATA->字串

	<!ATTLIST 元素名稱
		屬性名稱 CDATA #REQUIRED
	>
	<!-- #REQUIRED表示這個型別必須要出現 -->

 ②列舉

	<!ATTLIST 元素名稱
		屬性名稱 (A|B|C) #REQUIRED
	>

 ③ID->值只能是字元或者下劃線開頭

	<!ATTLIST 元素名稱
		屬性名稱 ID #REQUIRED
	>

屬性的約束:
 #REQUIRED->屬性必須存在
 #IMPLIED->屬性可有可無
 #FIXED->屬性是一個固定值

	<!ATTLIST 元素名稱
		屬性名稱 CDATA #FIXED "ABC"
	>
	<!-- 屬性值必須為ABC -->

 直接值->不寫屬性則直接使用直接值,寫了屬性則用寫的屬性值

	<!ATTLIST 元素名稱
		屬性名稱 CDATA "DEF"
	>

定義實體:

	<!ENTITY 實體名稱 "實體的值"><!-- 定義在內部dtd,寫在外部dtd檔案有些瀏覽器得不到內容 -->
	<name>&實體名;</name><!-- 實體的使用 -->

schema約束

1.該約束特點
schema符合xml的語法,xml語句,schema語法更加複雜
一個xml可以有多個schema,多個schema使用名稱空間來區分(類似於包名)
dtd裡面只有PCDATA型別(字串型別),而在schema裡面可以支援更多的資料型別(比如整數型別)

2.用法
 ①建立一個字尾名為.xsd的檔案(可以用myeclipse建立)
 ②xml中有多少個元素就中寫幾個<element>
 ③將簡單元素寫在複雜元素裡
 ④在被約束檔案裡面引入約束檔案
schema約束檔案:

	<?xml version="1.0" encoding="UTF-8">
	<schema xmlns="http://www.w3.org/2001/XMLSchema" 
	targetNamespace="http://www/itcast.cn/20151111" 		
	elementFormDefault="qualified">
	<!-- xmlns->當前xsd檔案是一個約束檔案
	     targetNamespace->被約束xml檔案通過此地址引入約束檔案
	-->
	<element name="person"><!-- 複雜元素person -->
		<complexType>
			<sequence>
			<!-- sequence->子元素是有順序的
			     all->相同名稱的子元素只能出現一次
			     choice->只能出現約束檔案中子元素其中的一個
			     
			-->
				<element name="name" type="string" maxOccurs="unbounded"></element>
				<!-- 複雜元素中的子元素
				maxOccurs="unbounded"->表示此子元素的出現次數無限制 
				-->
				<element name="age" type="int"></element>
			</sequence>
			<attribute name="id1" type="int" use="required"></attribute>
			<!-- 
			name->屬性名稱
			type->屬性型別
			use->屬性是否必須出現,requried
			-->
		</complexType>
	</element>
	</shema>

被約束的xml檔案:

	<?xml version="1.0" encoding="UTF-8">
	<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns="http://www/itcast.cn/20151111"
	xmlns:dept="http://www.exaple.org/department"
	xsi:schemaLocation="http://www/itcast.cn/20151111 1.xsd http://www.example.org/department 2.xsd">
	<!-- xmlns:xsi->當前xml檔案是一個被約束檔案
	     xmlns->約束文件裡面的targetNamespace
	     xmlns:dept->另一個約束檔案
	     xsi->名稱空間,targetNamespace+空格+約束文件的路徑
	-->
		<name>zhangsan</name>
		<dept:name>xxx</name><!-- dept約束檔案中的name -->
		<age>20</age>
	</person>