xml:extensiable markup language被稱做可擴展性標記語言
xml簡單的歷史介紹:
gml->sgml->html->xml
gml(通用標記語言)-在不一樣的機器上進行通訊的數據規範
sgml(標準通用標記語言)
html(超文本標記語言)css
1.咱們沒有xml這種語言以前,咱們使用的是String做爲兩個程序之間的通信,可是String不擅長關係型結構的數據,描述起來會有歧義 2.html語言自己就有缺陷 例如標記固定,沒有真正實現國際化
xml就很好的解決了這些問題html
1.配置文件:例如tomcat的web.xml和server.xml,xml可以清楚地描述出程序之間的關係。
2.程序間數據的傳輸,xml的格式是通用的,可以減小交換數據時的複雜性。
3.充當小型數據庫,若是咱們有時候須要人工配置的,那麼xml充當小型數據庫是個不錯的選擇,程序直接讀取xml文件顯然要比讀取數據庫要快。程序員
xml數據或者xml文檔只用於組織、存儲數據,除此以外的數據生成、讀取、傳送等等操做都與xml自己無關。 因此,想要操做xml,就須要用到xml以外的技術了: 爲xml定規則:如今通常使用DTD或者Schema技術。 解析xml的數據:通常使用DOM或者SAX技術,各有各的優勢。 提供樣式:xml通常用來存儲數據,但設計者的野心很大,也想用來顯示數據,就有了xslt(extensiable stylesheet language transformation)可擴展性樣式語言。
文檔聲明web
xml聲明放在xml的第一行 version---版本 encoding--編碼 standalone--獨立使用--默認是no。standalone表示該xml是否是獨立的,若是是yes,則表示這個xml文檔是獨立的,不能引用外部DTD規範文件;若是是no,則該xml文檔不是獨立的,表示能夠引用外部的DTD規範文檔。 正確的文檔聲明格式,屬性的位置不能改變。 <?xml version="1.0" encoding="utf-8" standalone="no"?>
元素
首先在這裏說明一個概念:在xml中元素和標籤指的不是同一個東西,不要被不一樣的名稱鎖迷惑了。
元素中須要值得注意的地方數據庫
xml元素中的出現的空格和換行都會被當作元素內容進行處理。 每一個xml文檔中必須有且只有一個根元素 元素必須閉合 大小寫敏感 不能交叉嵌套 不能以數字開頭
屬性 api
<中國 name="china"></中國>
註釋
CDATAtomcat
在編寫xml文件時,有些內容可能不想讓解析引擎解析執行,而是當作原始內容處理。遇到這種狀況就可使用CDATA區 <![CDATA[ ...內容 ]]>
轉義字符
處理指令
PI(processing instruction)。處理指令用來指揮解析引擎如何解析xml文檔內容。
例如:架構
在xml文檔中可使用xml-stylesheet指令,通知xml解析引擎,應用css文件顯示xml文檔內容。
<?xml-stylesheet type="text/css" href="1.css"?>
JDK中的xml APIdom
1.JAXP:主要負責解析xml 2.JAXB:主要負責將xml映射爲Java對象
什麼是xml解析編碼
xml用於組織、存儲數據,初次以外的數據生成、讀取、傳送等等的操做都與xml自己無關。
xml解析操做
1.dom(document object model)文檔對象模型,是W3C組織推薦解析xml的一種方式 2.sax(simple api for xml),它是xml社區的標準,幾乎全部的xml解析器都支持它。
應用程序不是直接對xml文檔進行操做的,而是由xml解析器對xml文檔進行分析,而後應用程序經過對xml解析器所提供的dom接口或者sax接口對分析結果進行操做,從而間接地實現了對xml文檔的訪問!
DOM解析是一個基於對象的API,它把xml的內容加載到內存中,生成與xml文檔內容對應的模型!當解析完成,內存中會生成與xml文檔的結構與之對應的DOM對象樹,這樣就可以根據樹的結構,以節點的形式對文檔進行操做。 DOM解析會把xml文檔加載到內存中,生成DOM樹的元素都是以對象的形式存在的,咱們操做這些對象就可以操做xml文檔了!
1.位於一個節點之上的節點是該節點的父節點(parent)
2.一個節點之下的節點是該節點的子節點(children)
3.同一個層次,具備相同父節點的節點是兄弟節點(sibling)
4.父、祖父節點及全部位於節點上面的,都是節點的祖先(ancestor)
在DOM解析中有幾個核心的操做接口
1.Document--表明整個xml文檔,經過Document節點能夠訪問xml文件中全部的元素內容 2.Node--Node節點幾乎在xml操做接口中幾乎至關於普通Java類的Object,不少核心接口都實現了它,在下面的關係圖能夠看出。 3.NodeList--表明一個節點的集合,一般是一個節點中節點的集合! 4.NameNodeMap--表示一組節點和其惟一名稱對應的一一對應關係,主要用於屬性節點的表示
###SAX解析
SAX採用的是一種順序的模式進行訪問,是一種快速讀取xml數據的方式。當時候sax解析器進行操做時,會觸發一系列事件SAX。採用事件處理的方式解析XML文件,利用SAX解析xml文檔,涉及兩個部分:解析器和事件處理器。 sax是一種推式的機制,你建立一個sax解析器,解析器在發現xml文檔中的內容就告訴你。如何處理,由程序員決定。
dom--內存中dom樹,若是文檔過大,致使溢出。 sax--部分讀取,能夠處理大文件,只能對文件按順序從頭至尾解析一遍,不支持增刪該查。
就是爲了客服dom和sax缺點
1.獲取
//獲取到解析器 SAXReader saxReader = new SAXReader(); //獲取到XML文件的流對象 InputStream inputStream = DOM4j.class.getClassLoader().getResourceAsStream("1.xml"); //經過解析器讀取XML文件 Document document = saxReader.read(inputStream);
2.獲取Document對象
1.讀取xml文件,得到document對象
SAXReader reader = new SAXReader(); Document document = reader.read(new File("input.xml"));
2.解析xml形式的文本,獲得document對象
String text = "<members></members>"; Document document=DocumentHelper.parseText(text);
3.主動建立document對象
Document document =DocumentHelper.createDocument(); //建立根節點 Element root = document.addElement("members");
能夠幫助咱們更加方便地得到xml的節點。