第一章 XML技術

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)出現的實體應用只有&amp、&lt、&gt、&apos和&quoto。
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)實現異構、異質系統間的通信。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章