1.1 標記語言的發展
1986:標準通用置標語言(Standard Generalized Markup Language,SGML)
1989:超文本置標語言(HyperText Markup Language,HTML)
1998:可擴展標記語言(eXtended Markup Language,XML)
1.2 可擴展標記語言XML
XML與HTML不同:1)XML標籤不是預定義的,可根據需要自行定義;2)XML標籤及其內容稱爲元素,XML元素可以由任意多層嵌套組成;3)XML文檔只描述數據而不包括顯示格式,其顯示可以由另一文件描述。
XMl是一種語法要求比較嚴格的標記語言。如果一個XML文檔滿足以下要求,則稱其爲一個結構良好的XML文檔:
1)文檔的開始必須是XML聲明(<?xml Version="1.0" encoding="gb2312"?>)
2)含有數據的元素必須有起始標記和結束標記,起始標記和結束標記應當匹配,且大小寫一致。XML對字母的大小寫是敏感的。
3)不含數據並且僅使用一個標記的元素必須以/>結束。
4)文檔只能有一個能夠包含全部其他元素的元素,即根元素必須唯一。
5)元素只能嵌套不能重疊。
6)屬性值必須加引號,屬性是不允許重複的。
7)字符<和&只能用於其實標記和實體引用。
8)出現的實體應用只有&、<、>、&apos和"o。
9)文檔必須包含一個或多個元素。
10)元素必須正確關閉。
1.3 DTD簡介
DTD可以定義XML文檔的詞彙和語法。
典型的DTD格式:
1)以DOCTYPE聲明爲起始標誌,告訴解析器以下內容屬於DTD
2)位於DOCTYPE後的DTD名稱,必須與XML文檔中的根元素完全一致,後面是一個“[”號,接下來是DTD正文。
DTD正文格式:
1)零到多個註釋部分,DTD註釋與XML註釋的語法完全相同。
2)零到多個<!ELEMENT…>定義,每個<!ELEMENT…>定義一個XML元素。
3)零到多個<!ATTLIST…>定義,每個<!ATTLIST…>定義一個屬性。
4)零到多個<!ENTITY…>定義,每個<!ENTITY…>定義一個實體。
5)零到多個<!NOTATION…>定義,每個<!NOTATION…>定義一個符號。
DTD中表示頻率的特殊標記有3個:
+:表明子元素可以出現1次或多次;
*:表明子元素可以出現0次或多次;
?:表明子元素可以出現0次或1次。
對屬性的限定條件:
#REQUIRED:必須的屬性,意味着必須爲該元素提供該屬性;
#IMPLIED:該屬性是可有可無的;
#FIXED:該屬性的值是固定的,定義是必須指定固定值。使用該元素時無需爲其分配該屬性,XML處理器會自動爲屬性增加固定值。
DTD對實體聲明分爲以下三種情況:
1)定義普通實體<!ENTITY 實體名 “實體值”>
2) 外部普通實體<!ENTITY 實體名 SYSTEM "實體值所在文件的URI"><!ENTITY 實體名 PUBLIC "公用實體標識名" "實體值所在文件的URI">
3)外部參數實體<!ENTITY %實體名 SYSTEM|PUBLIC["公用實體標識名"] "實體值所在文件的URI">
DTD的不足之處:
1)DTD過於複雜
2)DTD對數據類型定義支持不夠
3)擴展機制複雜
4)DTD不支持名稱空間的機制
1.4 XML Schema
與DTD相比,XMLSchema具有以下幾個明顯的優勢:
1)XML Schema 使用XML語法
2)XML Schema 支持名稱空間。
3)XML Schema 支持多種數據類型。
4)XML Schema 具有更爲強大和靈活的定義能力。
一個例子:
<?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域名的一個定義
eltOnly可以知道birthday元素的數據只能夠由元素構成。
1.5 XPath
1)選擇所有book元素://book
2)選擇未知元素:/books/*/title
3)選擇分支:(第一個)/books/book[1],(最後一個)/books/book[last()]
4)選擇幾個路徑:books/book/title|/books/book/author
5)選擇屬性:
//@year
//book[@year]
//book[@year="2010"]
1.6 XML文檔解析器
1、SAX簡介
SAX提供一種順序訪問XML文檔的方式,整個XML解析過程類似於流媒體的處理過程。該模型可在不關注文檔完整結構的情況下測定其特徵或相關數據。
SAX按照下列步驟來解析XML文檔:
1)設置事件的處理器,即對ContentHandler接口做相應的實現。
2)產生解析器,載入需要解析的文檔並註冊相應的事件處理器。
3)在感興趣的時間方法中加入合適程序需要的控制邏輯,如果需要的話,可以產生自己的對象模型。
4)根據文檔解析過程中產生的時間,調用相應的時間處理方法。
5)重複4)直至文檔解析結束。
2、DOM簡介
用一種樹狀結構來存儲XML文檔,它吧整個樹狀結構以Document對象爲跟,其餘所屬元素及屬性構成根的子樹。
對DOM樹的節點進行各種隨機操作:
1)Document對象:作爲樹的最高節點,Documennt對象是對整個文檔進行操作的入口。
2)Element和Attr對象:這些節點對象都是文檔某一部分的映射,節點的定級層次恰好反映了文檔的結構。
3)Text對象:作爲Element和Attr對象的子節點,Text對象表達了元素或屬性的文本內容。Text節點不再包含任何子節點。
4)集合索引:DOM提供了幾種集合索引方式,可以對節點按指定方式進行遍歷。索引參數都是從0開始計數。
3、SAX和DOM的比較
DOM適用於需要結構化編輯XML文檔、對文檔的結構有清楚的瞭解,以及和其他應用共享XML文檔的情況。DOM佔用內存比較大,執行速度較慢。
SAX適用於:1)只需要XML文檔中抽取部分元素;2)文檔比較大,沒有足夠的內存來進行處理;3)不和其他應用共享XML文檔。
<? xml Version="1.0" encoding="gb2312"?>
<books>
<book email="[email protected]">
<title>XML Retrieval</title>
</book>
<book email="[email protected]">
<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相關四種解析http://blog.csdn.net/jzhf2012/article/details/8532873
1.7 XML特點及其應用
XML數據的優點在於:
1)他允許各個組織、個人建立適合自己需要的置標集合。
2)數據存儲格式不受顯示格式的約束。
3)應用於Internet上的數據交換,XML數據的出現使得可以實現各種格式數據之間的無縫交換,因爲其具有數據自我描述性和豐富的數據表達能力。
4)實現更有意義、更準確的搜索。
5)實現異構、異質系統間的通信。