1.1 標(biāo)記語(yǔ)言的發(fā)展
1986:標(biāo)準(zhǔn)通用置標(biāo)語(yǔ)言(Standard Generalized Markup Language,SGML)1989:超文本置標(biāo)語(yǔ)言(HyperText Markup Language,HTML)1998:可擴(kuò)展標(biāo)記語(yǔ)言(eXtended Markup Language,xml)1.2 可擴(kuò)展標(biāo)記語(yǔ)言XML
XML與HTML不同:1)XML標(biāo)簽不是預(yù)定義的,可根據(jù)需要自行定義;2)XML標(biāo)簽及其內(nèi)容稱(chēng)為元素,XML元素可以由任意多層嵌套組成;3)XML文檔只描述數(shù)據(jù)而不包括顯示格式,其顯示可以由另一文件描述。XMl是一種語(yǔ)法要求比較嚴(yán)格的標(biāo)記語(yǔ)言。如果一個(gè)XML文檔滿(mǎn)足以下要求,則稱(chēng)其為一個(gè)結(jié)構(gòu)良好的XML文檔:1)文檔的開(kāi)始必須是XML聲明(<?xml Version="1.0" encoding="gb2312"?>)2)含有數(shù)據(jù)的元素必須有起始標(biāo)記和結(jié)束標(biāo)記,起始標(biāo)記和結(jié)束標(biāo)記應(yīng)當(dāng)匹配,且大小寫(xiě)一致。XML對(duì)字母的大小寫(xiě)是敏感的。3)不含數(shù)據(jù)并且僅使用一個(gè)標(biāo)記的元素必須以/>結(jié)束。4)文檔只能有一個(gè)能夠包含全部其他元素的元素,即根元素必須唯一。5)元素只能嵌套不能重疊。6)屬性值必須加引號(hào),屬性是不允許重復(fù)的。7)字符<和&只能用于其實(shí)標(biāo)記和實(shí)體引用。8)出現(xiàn)的實(shí)體應(yīng)用只有&、<、>、&apos和"o。9)文檔必須包含一個(gè)或多個(gè)元素。10)元素必須正確關(guān)閉。1.3 DTD簡(jiǎn)介
DTD可以定義XML文檔的詞匯和語(yǔ)法。典型的DTD格式:1)以DOCTYPE聲明為起始標(biāo)志,告訴解析器以下內(nèi)容屬于DTD2)位于DOCTYPE后的DTD名稱(chēng),必須與XML文檔中的根元素完全一致,后面是一個(gè)“[”號(hào),接下來(lái)是DTD正文。DTD正文格式:1)零到多個(gè)注釋部分,DTD注釋與XML注釋的語(yǔ)法完全相同。2)零到多個(gè)<!ELEMENT…>定義,每個(gè)<!ELEMENT…>定義一個(gè)XML元素。3)零到多個(gè)<!ATTLIST…>定義,每個(gè)<!ATTLIST…>定義一個(gè)屬性。4)零到多個(gè)<!ENTITY…>定義,每個(gè)<!ENTITY…>定義一個(gè)實(shí)體。5)零到多個(gè)<!NOTATION…>定義,每個(gè)<!NOTATION…>定義一個(gè)符號(hào)。DTD中表示頻率的特殊標(biāo)記有3個(gè):+:表明子元素可以出現(xiàn)1次或多次;*:表明子元素可以出現(xiàn)0次或多次;?:表明子元素可以出現(xiàn)0次或1次。對(duì)屬性的限定條件:#REQUIRED:必須的屬性,意味著必須為該元素提供該屬性;#IMPLIED:該屬性是可有可無(wú)的;#FIXED:該屬性的值是固定的,定義是必須指定固定值。使用該元素時(shí)無(wú)需為其分配該屬性,XML處理器會(huì)自動(dòng)為屬性增加固定值。DTD對(duì)實(shí)體聲明分為以下三種情況:1)定義普通實(shí)體<!ENTITY 實(shí)體名 “實(shí)體值”>2) 外部普通實(shí)體<!ENTITY 實(shí)體名 SYSTEM "實(shí)體值所在文件的URI"><!ENTITY 實(shí)體名 PUBLIC "公用實(shí)體標(biāo)識(shí)名" "實(shí)體值所在文件的URI">3)外部參數(shù)實(shí)體<!ENTITY %實(shí)體名 SYSTEM|PUBLIC["公用實(shí)體標(biāo)識(shí)名"] "實(shí)體值所在文件的URI">DTD的不足之處:1)DTD過(guò)于復(fù)雜2)DTD對(duì)數(shù)據(jù)類(lèi)型定義支持不夠3)擴(kuò)展機(jī)制復(fù)雜4)DTD不支持名稱(chēng)空間的機(jī)制1.4 XML Schema
與DTD相比,XMLSchema具有以下幾個(gè)明顯的優(yōu)勢(shì):1)XML Schema 使用XML語(yǔ)法2)XML Schema 支持名稱(chēng)空間。3)XML Schema 支持多種數(shù)據(jù)類(lèi)型。4)XML Schema 具有更為強(qiáng)大和靈活的定義能力。一個(gè)例子:
<?xml version="1.0" encoding="GB2312"?><Schema xmlns="urn:schemas-microsoft-com:xml-data"xmlns:dt="urn:schemas-microsoft-com:datatypes"><ElementType name="name"/><ElementType name="sex"/><ElementType name="age"/><ElementType name="birthday" content="eltOnly"><element type="year"/><element type="month"/><element type="day"/></ElementType></Schema>Schema域名的一個(gè)定義 eltOnly可以知道birthday元素的數(shù)據(jù)只能夠由元素構(gòu)成。
1.5 XPath
1)選擇所有book元素://book2)選擇未知元素:/books/*/title3)選擇分支:(第一個(gè))/books/book[1],(最后一個(gè))/books/book[last()]4)選擇幾個(gè)路徑:books/book/title|/books/book/author5)選擇屬性://@year//book[@year]//book[@year="2010"]1.6 XML文檔解析器
1、SAX簡(jiǎn)介 SAX提供一種順序訪問(wèn)XML文檔的方式,整個(gè)XML解析過(guò)程類(lèi)似于流媒體的處理過(guò)程。該模型可在不關(guān)注文檔完整結(jié)構(gòu)的情況下測(cè)定其特征或相關(guān)數(shù)據(jù)。 SAX按照下列步驟來(lái)解析XML文檔: 1)設(shè)置事件的處理器,即對(duì)ContentHandler接口做相應(yīng)的實(shí)現(xiàn)。 2)產(chǎn)生解析器,載入需要解析的文檔并注冊(cè)相應(yīng)的事件處理器。 3)在感興趣的時(shí)間方法中加入合適程序需要的控制邏輯,如果需要的話,可以產(chǎn)生自己的對(duì)象模型。 4)根據(jù)文檔解析過(guò)程中產(chǎn)生的時(shí)間,調(diào)用相應(yīng)的時(shí)間處理方法。 5)重復(fù)4)直至文檔解析結(jié)束。2、DOM簡(jiǎn)介 用一種樹(shù)狀結(jié)構(gòu)來(lái)存儲(chǔ)XML文檔,它吧整個(gè)樹(shù)狀結(jié)構(gòu)以Document對(duì)象為跟,其余所屬元素及屬性構(gòu)成根的子樹(shù)。 對(duì)DOM樹(shù)的節(jié)點(diǎn)進(jìn)行各種隨機(jī)操作: 1)Document對(duì)象:作為樹(shù)的最高節(jié)點(diǎn),Documennt對(duì)象是對(duì)整個(gè)文檔進(jìn)行操作的入口。 2)Element和Attr對(duì)象:這些節(jié)點(diǎn)對(duì)象都是文檔某一部分的映射,節(jié)點(diǎn)的定級(jí)層次恰好反映了文檔的結(jié)構(gòu)。 3)Text對(duì)象:作為Element和Attr對(duì)象的子節(jié)點(diǎn),Text對(duì)象表達(dá)了元素或?qū)傩缘奈谋緝?nèi)容。Text節(jié)點(diǎn)不再包含任何子節(jié)點(diǎn)。 4)集合索引:DOM提供了幾種集合索引方式,可以對(duì)節(jié)點(diǎn)按指定方式進(jìn)行遍歷。索引參數(shù)都是從0開(kāi)始計(jì)數(shù)。3、SAX和DOM的比較 DOM適用于需要結(jié)構(gòu)化編輯XML文檔、對(duì)文檔的結(jié)構(gòu)有清楚的了解,以及和其他應(yīng)用共享XML文檔的情況。DOM占用內(nèi)存比較大,執(zhí)行速度較慢。 SAX適用于:1)只需要XML文檔中抽取部分元素;2)文檔比較大,沒(méi)有足夠的內(nèi)存來(lái)進(jìn)行處理;3)不和其他應(yīng)用共享XML文檔。<? xml Version="1.0" encoding="gb2312"?><books><book email="aa@123.com"><title>XML Retrieval</title></book><book email="bb@123.com"><title>information Retrieval</title></book></books>解析算法:
import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.List;import org.jdom2.Document;import org.jdom2.Element;import org.jdom2.JDOMException;import org.jdom2.input.SAXBuilder;import org.jdom2.output.XMLOutputter;public class JDomParse {public JDomParse(){ String xmlpath="MyXml.xml"; SAXBuilder builder=new SAXBuilder(false); try{ Document doc=builder.build(new FileInputStream(xmlpath)); Element books=doc.getRootElement(); List<Element> booklist=books.getChildren("book"); java.util.Iterator<Element> iter=booklist.iterator(); while(iter.hasNext()) { Element book=(Element)iter.next(); String email=book.getAttributeValue("email"); System.out.PRintln(email); String name=book.getChildTextTrim("title"); System.out.println(name); book.getChild("title").setText("alterrjzjh"); } XMLOutputter outputter=new XMLOutputter(); outputter.output(doc, new FileOutputStream(xmlpath)); }catch(JDOMException e) { e.printStackTrace(); }catch(IOException e) { e.printStackTrace(); }} public static void main(String[] args) { // TODO Auto-generated method stub new JDomParse(); }}xml相關(guān)四種解析http://blog.csdn.net/jzhf2012/article/details/8532873
1.7 XML特點(diǎn)及其應(yīng)用
XML數(shù)據(jù)的優(yōu)點(diǎn)在于: 1)他允許各個(gè)組織、個(gè)人建立適合自己需要的置標(biāo)集合。 2)數(shù)據(jù)存儲(chǔ)格式不受顯示格式的約束。 3)應(yīng)用于Internet上的數(shù)據(jù)交換,XML數(shù)據(jù)的出現(xiàn)使得可以實(shí)現(xiàn)各種格式數(shù)據(jù)之間的無(wú)縫交換,因?yàn)槠渚哂袛?shù)據(jù)自我描述性和豐富的數(shù)據(jù)表達(dá)能力。 4)實(shí)現(xiàn)更有意義、更準(zhǔn)確的搜索。 5)實(shí)現(xiàn)異構(gòu)、異質(zhì)系統(tǒng)間的通信。新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注