Java Web之XML基础
有好幾天沒有更新博客了,前段時間因為要開學了,需要湊足學費才能繼續在學校學習,耽誤了幾天,這兩天需要補充前面需要學習的一些知識點了。今天就開始進入JavaWeb階段吧,這段時間我們需要了解一些前端的知識,還有數據庫方面的等等,具體的我下次回顧的時候再談,今天就開始XML方面的一些基礎知識的回顧吧!!
?
一. xml概述
1.1.xml是什么?
 Extensible Markup Language 可擴展標記語言。
 標記語言:不止存儲文本內容,也存儲和內容相關的其他信息
 W3C 1998 1.0
 xml是一種數據存儲格式, 本質上就是一段字符串。
xml是如何來保存數據的?
 xml中允許用戶自定義標簽, 標簽分為開始標簽和結束標簽。開始標簽和結束標簽之間可以嵌套其他的標簽。
 正是利用標簽來保存數據, 利用標簽之間嵌套關系來保存數據之間的層級關系。
1.2.xml的應用場景
 (1)傳輸數據
 由于xml本質上是一段字符串, 具有跨平臺的特性, 因此可以在不同系統之間進行數據交換。
 (2)用作配置文件
 由于xml可以保存有結構的數據, 因此xml常被用來用作應用程序的配置文件。
1.3.xml文件
 編寫一個xml文件
?
1.4.xml校驗
 校驗xml文件
?
二. 語法
2.1.文檔聲明
 用來聲明當前xml基本屬性信息的, 解析器會根據文檔聲明來決定如何解析xml文件。
注意:
 一個xml文件必須包含且只能包含一個文檔聲明。
 文檔聲明必須放在xml文件的第一行,前面不能有任何內容。
 如果一個xml文件沒有包含文檔聲明, 則該xml是一個不符合規范的xml文件。
寫法:
 <?xml version="1.0"?> 
 version用來聲明當前xml所遵循的xml規范, 目前就是1.0
 <?xml version="1.0" encoding="UTF-8"?> 
 encoding用來聲明當前xml所使用的字符集編碼, xml解析器在解析xml的時候,會根據encoding屬性所指定的編碼來解析xml文件。
注意: 文件在保存時所使用的編碼要和encoding屬性所指定編碼相同, 才可以避免亂碼問題。
 <?xml verison="1.0" encoding="UTF-8"? standalone="yes"> 
 standalone用來聲明當前文檔是否獨立, 如果xml文檔不依賴其他的文檔而存在, 表明當前文檔是一個獨立的文檔, 可以指定值為yes, 如果當前文檔需要依賴其他的文檔而存在, 需要指定值為no。
 2.2.元素 
 ◇ 一個標簽(標記)就是一個元素。
 ◇ 標簽分為開始標簽和結束標簽, 在開始標簽和結束標簽之間的文本稱之為標簽體。
 ◇ 如果一個標簽既不包含標簽體, 也不包含其他的子標簽, 可以把開始標簽和結束標簽合并成一個自閉標簽。
 ◇ 標簽要合理的嵌套, 不能出現交叉嵌套。
 ◇ 一個xml文件有且僅有一個根標簽。
◇ 元素的命名規范:
 區分大小寫。 如:<P>和<p>是兩個不同的標簽。
 不能以數字或標點符號開頭。 
 不能以xml(XML, Xml)開頭。
 不能包含空格 如:<a b>
 不能包含冒號 如:<a:b>
易犯錯誤: 
 標簽沒有結束標簽或者是自閉標簽沒有自閉!!! 
2.3.屬性
 一個元素上可以聲明多個屬性, 多個屬性之間用空格隔開。
 屬性與屬性值用等號連接, 屬性的值用單引號或者雙引號引起來。
 屬性的命名和元素遵循相同的命名規范。
?
?
2.4.注釋 (了解)
 格式: <!-- xml注釋 -->
 注釋不能放在文檔聲明的前面
 注釋不能交叉嵌套
2.5.轉義字符 (了解)
 常用的轉義字符:
 < <
 > >
 & &
 " "
 ' '
三.xml約束 (了解)
 約束: 在xml中, 可以提供約束文檔來約束xml文檔的寫法
 DTD/Schema W3C
 DTD:簡單易學,上手快,但是功能有局限性,不能限制標簽體的值的類型或者值的范圍
 Schema:復雜,不好學,但是可以實現精細的限定
?
?
1.???? XML Schema
1.1.???????? XML Schema概述
1.1.1.????????????? XML Schema
XML Schema 也是一種用于定義和描述 XML 文檔結構與內容的模式語言,其出現是為了克服 DTD 的局限性
1.1.2.????????????? Schema與 DTD的比較:
XML Schema符合XML語法結構。
DOM、SAX等XML API很容易解析出XML Schema文檔中的內容。
XML Schema對名稱空間支持得非常好。
XML Schema比XML DTD支持更多的數據類型,并支持用戶自定義新的數據類型。
XML Schema定義約束的能力非常強大,可以對XML實例文檔作出細致的語義限制。
XML Schema不能像DTD一樣定義實體,比DTD更復雜,但Xml Schema現在已是w3c組織的標準,它正逐步取代DTD。?
1.2.???????? Schema約束快速入門
1.2.1.????????????? 快速入門
XML Schema 文件自身就是一個XML文件,但它的擴展名通常為.xsd。
一個XML Schema文檔通常稱之為模式文檔(約束文檔),遵循這個文檔書寫的xml文件稱之為實例文檔。
和XML文件一樣,一個XML Schema文檔也必須有一個根結點,但這個根結點的名稱為Schema。
編寫了一個XML Schema約束文檔后,通常需要把這個文件中聲明的元素綁定到一個URI地址上,在XML Schema技術中有一個專業術語來描述這個過程,即把XML Schema文檔聲明的元素綁定到一個名稱空間上,以后XML文件就可以通過這個URI(即名稱空間)來告訴解析引擎,xml文檔中編寫的元素來自哪里,被誰約束。
?
<?xml version="1.0" encoding="UTF-8"?> <tedu:書架 xmlns:tedu="http://www.tedu.cn"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation=“http://www.tedu.cn http://www.tedu.cn/book.xsd"><tedu:書><tedu:書名>數據結構</tedu:書名><tedu:作者>嚴蔚敏</tedu:作者><tedu:售價>29.00元</tedu:售價></tedu:書> </tedu:書架>
?
<?xml version="1.0" encoding="UTF-8" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"targetNamespace=“http://www.tedu.cn"elementFormDefault="qualified"><xs:element name='書架' ><xs:complexType><xs:sequence maxOccurs='unbounded' ><xs:element name='書' ><xs:complexType><xs:sequence><xs:element name='書名' type='xs:string' /><xs:element name='作者' type='xs:string' /><xs:element name='售價' type='xs:string' /></xs:sequence></xs:complexType></xs:element></xs:sequence></xs:complexType></xs:element> </xs:schema>
?
?
1.3.???????? 名稱空間(namespace)
1.3.1.????????????? 名稱空間的概念
在XML Schema中,每個約束模式文檔都可以被賦以一個唯一的名稱空間,名稱空間用一個唯一的URI(Uniform Resource Identifier,統一資源標識符)表示。 在Xml文件中書寫標簽時,可以通過名稱空間聲明(xmlns),來聲明當前編寫的標簽來自哪個Schema約束文檔。如:
??????? <tedu:書架 xmlns:tedu=“http://www.tedu.cn”>
???????????????? <tedu:書>……</tedu:書>
??????? </tedu:書架>
??????? ?此處使用tedu來指向聲明的名稱,以便于后面對名稱空間的引用。
注意:名稱空間的名字語法容易讓人混淆,盡管以 http:// 開始,那個 URL 并不指向一個包含模式定義的文件。事實上,這個 URL:http://www.tedu.cn根本沒有指向任何文件,只是一個分配的名字。
1.3.2.????????????? XML中使用名稱空間引入Schema
為了在一個XML文檔中聲明它所遵循的Schema文件的具體位置,通常需要在Xml文檔中的根結點中使用schemaLocation屬性來指定,例如:
??????? <tedu:書架 xmlns:tedu="http://www.tedu.cn"
???????????????? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
???????????????? xsi:schemaLocation=“http://www.tedu.cn book.xsd">
schemaLocation此屬性有兩個值。第一個值是需要使用的命名空間。第二個值是供命名空間使用的 XML schema 的位置,兩者之間用空格分隔。
注意,在使用schemaLocation屬性時,也需要指定該屬性來自哪里。
1.3.3.????????????? 使用默認名稱空間
基本格式:
??????? xmlns="URI"?
舉例:
??????? <書架 xmlns="http://www.tedu.cn"
???????????????? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
???????????????? xsi:schemaLocation=“http://www.tedu.cn book.xsd">
???????????????? <書>
???????????????? <書名>數據結構</書名>
???????????????? <作者>嚴蔚敏</作者>
???????????????? <售價>29.00元</售價>
???????????????? </書>
??????? <書架>
1.3.4.????????????? 使用名稱空間引入多個XML Schema文檔
文件清單:xmlbook.xml
<?xml version="1.0" encoding="UTF-8"?>
<書架 xmlns="http://www.tarena.org/xmlbook/schema"
??????? ??????? xmlns:demo="http://www.tarena.org/demo/schema"
??????? ??????? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
??????? ??????? xsi:schemaLocation="http://www.tarena.org/xmlbook/schema ???????????????????????? ???????????????????????? http://www.tarena.org/xmlbook.xsd
??????? ??????? http://www.tarena.org/demo/schema http://www.tarena.org/demo.xsd">
??????? <書>
???????????????? <書名>JavaScript網頁開發</書名>
???????????????? <作者>張孝祥</作者>
???????????????? <售價 demo:幣種=”人民幣”>28.00元</售價>
??????? </書>
</書架>
?
1.3.5.????????????? 不使用名稱空間引入XML Schema文檔
文件清單:xmlbook.xml
<?xml version="1.0" encoding="UTF-8"?>
<書架 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
??????? xsi:noNamespaceSchemaLocation="xmlbook.xsd">
??????? <書>
???????????????? <書名>JavaScript網頁開發</書名>
???????????????? <作者>張孝祥</作者>
???????????????? <售價>28.00元</售價>
??????? </書>
</書架>
?
1.3.6.????????????? 在XML Schema文檔中聲明名稱空間
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
???????????????? ?????? targetNamespace="http://www. tedu.cn"
???????????????? ?????? elementFormDefault="qualified">
<xs:schema>
?
targetNamespace元素用于指定schema文檔中聲明的元素屬于哪個名稱空間。
elementFormDefault元素用于指定,該schema文檔中聲明的根元素及其所有子元素是否都屬于targetNamespace所指定的名稱空間。
?
1.4.???????? Schema語法
略
?
 
四.xml解析
 4.1.兩種解析思想 (!!!重要)
DOM解析:
 將整個XML文檔加到內存中,用一個Document對象來表示整個文檔。將XML文檔中所有的內容(元素、屬性、文本等)都解析成一個一個的對象,用對象來表示元素,用對象與對象之間的引用關系來表示元素之間的層級關系。通過在程序中操作對象來間接的操作(增刪改查)XML文檔中的內容。
優點:
 (1)可以十分方便對節點進行增刪改查的操作。
 (2)在內存中保存了一顆文檔結構樹, 只需要解析一次就可以重復使用這些數據。
缺點:
 (1)將整個文檔都加載到內存中用對象表示,占用內存空間,如果xml文檔體積非常龐大時,將會十分耗費內存。
 (2)需要等整個xml文檔解析完成后,才可以對節點進行操作,相對來說耗費時間,效率低。
package cn.tedu.dom4j;import java.util.Iterator;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;public class Demo1 {// junit:可以模擬程序的運行環境,測試一個方法@Testpublic void find() throws DocumentException{// 需求:查詢第一本書的書名,并輸出到控制臺//1. 創建一個SaxReader對象-用來解析XML的核心類SAXReader reader=new SAXReader();//2. 解析一個XML-返回一個解析好的document對象Document document=reader.read("book.xml");//3. 通過document返回一個RootElementElement rootEle=document.getRootElement();//4. 獲取所有元素的迭代器Iterator<Element> it=rootEle.elementIterator();//5. 迭代所有元素while(it.hasNext()){Element e=it.next();if("書".equals(e.getName())){Iterator<Element> it2=e.elementIterator("書名");while(it2.hasNext()){Element e2=it2.next();System.out.println("name="+e2.getName());String value=e2.getText();System.out.println("value="+value);}break;}}}}
  
 SAX解析:
優點:
 (1)由于是逐行解析,因此不需要將整個XML文檔加載進內存,占用內存小。理論上多大的XML文件都可以解析
 (2)由于是逐行解析,遇到想要的內容就可以停下來處理,效率高
缺點:
 (1)每次需要數據都需要重新解析。
 (2)只能讀數據,不能對XML文檔進行增刪改的操作。
 4.2.DOM4J解析
 略
轉載于:https://www.cnblogs.com/tangdiao/p/9594631.html
總結
以上是生活随笔為你收集整理的Java Web之XML基础的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 深圳最贵的房子多少钱一平米
 - 下一篇: 李钟硕喜欢我吗