多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > web前端 > htmlcss > 粗淺看 XML

粗淺看 XML

來源:程序員人生   發布時間:2016-06-23 14:34:16 閱讀次數:4003次

概述 

eXtensible Markup Language 可擴大標記語 言——由 W3C 組織發 布,目前推薦遵照的是 W3C 組織于 2000 年發 布的 XML1.0 規范。

XML 的使命,就是以1 個統1的格式,組織有 關系的數據,為不同平 臺下的利用程序服務。


<?xml version="1.0" encoding="utf⑻"?> 

<中國>

<北京>

<海淀></海淀>

<豐臺></豐臺>

</北京>

<湖南>

<長沙></長沙>

<岳陽></岳陽>

</湖南>

<湖北>

<武漢></武漢>

<荊州></荊州>

</湖北>

</中國>


主要用處

配置文件

   JavaWeb

框架 數據交換

   Ajax WebService

數據存儲

   保存關系型數據

 

 

語法

文檔結構



文檔聲明

①在編寫 XML 文檔時,必須在文件的第1行書寫文檔聲明。 最簡單的聲明語法:<?xml version="1.0" ?>

②用 encoding 屬性說明讀取文檔所用的解碼的字符集:

<?xml version="1.0" encoding="GB2312" ?>

這樣就要求保存文件時,必須用 GB2312 編碼保存。此時要求 XML 文檔的作者確 認當前編輯器保存文檔的編碼方式。

eclipse 會自動依照解碼字符集進行編碼保存 記事本需要另存為指定的字符集


語法規則

①第1行動 XML 聲明,且必須頂格寫

②只能有1個根標簽

③標簽必須正確結束

④標簽不能交叉嵌套

⑤嚴格辨別大小寫

⑥屬性必須有值,且必須加引號

⑦標簽不能以數字開頭


轉義字符

特殊字符

替換符號

&lt;

&gt;

&

&amp;

&quot;

&apos;

 

CDATA 區

①當 XML 文檔中需要寫1些程序代碼、SQL 語句或其他不希望 XML 解析器進行 解析的內容時,就能夠寫在 CDATA 區中

②XML 解析器會將 CDATA 區中的內容原封不動的輸出

③CDATA   區的定義格式:<![CDATA[?]]> 例如:

 

注釋

①Xml 文件中的注釋采?。骸?lt;!--注釋-->” 格式。注意:

●XML 聲明之前不能有注釋

●注釋不能嵌套


處理指令

①處理指令,簡稱 PI  (processing instruction)。處理指令用來指揮解析引擎如何解析 XML 文檔內容。

②處理指令必須以“<?”作為開頭,以“?>”作為結尾,XML 聲明語句就是最常 見的1種處理指令。

例如,在 XML 文檔中可使用 xml-stylesheet 指令,通知 XML 解析引擎,利用 css

文件顯示 xml 文檔內容。

<?xml-stylesheet type="text/css" href="p.css"?>

解析

解析方式

dom:(Document Object Model,  即文檔對象模型)  是 W3C  組織推薦的處理

XML  的1種方式。 它下面有兩個分支:jDom 與 dom4j

它們可都可以對 xml 文件進行增刪改查的操作

sax: (Simple API for XML) 不是官方標準,但它是 XML  社區事實上的標準, 幾近所有的 XML  解析器都支持它。

只能進行解析(查詢)

pull:     Pull 解析和 Sax 解析很類似,都是輕量級的解析,它是1個第3方開 源的 Java 項目,但在 Android 的內核中已嵌入了 Pull  。 只能進行解析(查詢)


解析技術體系


DOM 解析

1. DOM 中對象接口關系圖


l    Node:xml 文件所有對象的根接口  節點

l    Document:代表 xml 文件的全部內容的對象的接口

l    Element:代表某個元素或標簽的對象的接口

l    Attr:代表某個元素的某個屬性對象的接口

l    Text:代表標簽體文本標簽本對象的接口 

l    NodeList:代表包括多個 Node 接口對象的集合對象

2.主要方法概覽

Node

appendChild(newChild)

將新的節點添加為最后1個子節點

 

insertBefore(newChild,refChild)

在某個子節點前插入1個新子節點

 

removeChild(oldChild)

刪除指定的某個子節點

 

replaceChild(newChild,oldChild)

將指定的子節點替換成新的子節點

 

setTextContent(textContent)

設置文本內容(1般用在元素對象上)

 

getNodeName()

得到節點名稱(1般用在元素對象上)

 

getParentNode()

得到父節點(1般用在元素對象上)

 

getTextContent()

得到文本內容(1般用在元素對象上)

 

getFirstChild()

得到第1個子節點

 

getLastChild()

得到最后1個子節點

 

getNextSibling()

得到下1個兄弟節點

 

getPreviousSibling()

得到上1個兄弟節點


Document

createElement(name)

創建1個指定名稱的標簽對象返回

 

getDocumentElement ()//getRootElement()

得到文檔的根元素對象

 

getElementById(id)

根據子元素的 id 屬性找到對應的子元素

 

getElementsByTagName(name)

根據標簽名得到對應的子標簽的集合

Element

 

 

 

setAttribute(name, value)

設置元素的屬性名和屬性值

 

removeAttribute(attrName)

根據屬性名刪除對應的屬性

 

getAttribute(attrName)

根據屬性名得到對應的屬性

 

getElementsByTagName(name)

根據標簽名得到對應的子標簽的集合

 

getTagName()

得到標簽名

Attr、Text

極少直接操作這兩個接口的對象,1般通過 Element 對象來操作

NodeList

getLength()得到包括的節點對象的個數  item(index)根據下標得到某個節點


3.demo

讀取 id 為 008 的員工的年齡

<?xml version="1.0" encoding="UTF⑻"?> <class> <employeer id="007"> <name>王靈</name> <age>18</age> </ employeer > < employeer id="008"> <name>張童</name> <age>23</age> </ employeer > </class>


4.提示:獲得解析器對象

javax.xml.parsers 包中的 DocumentBuilder 類用于加載 xml 文件,并產生1個 Document 對象

//創建1個 xml 文檔解析器工廠對象

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();


//通過工廠創建1個 xml 文檔解析器對象

DocumentBuilder builder = factory.newDocumentBuilder();


//通過解析器對象解析1個文件對象得到 Document 對象

Document document = builder.parse(new File("d:/users.xml")); 


XML dom4j解析

1.Dom4j 是1個簡單、靈活的開放源代碼的庫。Dom4j 是由初期開發 JDOM 的人分離出來而 后獨立開發的。與 JDOM 不同的是,dom4j 使用接口和抽象基類,雖然 Dom4j 的 API 相對要 復雜1些,但它提供了比 JDOM 更好的靈活性。

2.Dom4j 是1個非常優秀的 Java XMLAPI,具有性能優良、功能強大和極易使用的特點?,F 在很多軟件采取的 Dom4j,例如 Hibernate。使用Dom4j 開發,需下載 dom4j 相應的 jar 文 件。

3.獲得 Document 對象

SAXReader reader = new SAXReader();

Document    document= reader.read(new File( "input.xml“ ));

4.元素操作

?     //獲得文檔的元素.

Element root = document.getRootElement();

?     //獲得某個元素的指定名稱的第1個子節點

Element element = element.element(“書名");


?     //獲得某個元素的指定名稱的所有子元素的集合

List list = element.elements(“書名”);

?     //添加1個指定名稱的子元素

Element childEle =parentEle.addElement(“書名”);

?     //刪除某個元素指定的子元素 parentEle.remove(childEle);

5.屬性操作

?     //獲得某個元素的指定名稱的屬性對象

Attribute attr = element.attribute(“id”);

?     //獲得某個元素的指定名稱的屬性值

String id =element.attributeValue(“id”);

?     //給元素添加屬性或更新其值

Attribute attr =element.addAttribute(“id”,”123”);

?     //刪除某個元素的指定屬性 element.remove(attribute);

6.文本操作

?     //獲得某個元素的文本內容 String text = element.getText();

?     //給某個元素添加或更新文本內容

element.setText(“Tom”);

7.將文檔寫入 XML 文件,使更改生效

OutputFormat format = OutputFormat.createPrettyPrint();

XMLWriter writer = newXMLWriter( newFileOutput( "output.xml“),format);

writer.write(document); writer.close();


XPath解析

1. XPath  是在 XML 文檔中查找信息的語言 XPath  是通過元素和屬性進行查找 XPath 簡化了 Dom4j 查找節點的進程 使用 XPath 必須導入 jaxen⑴.1-beta⑹.jar

否則出現

NoClassDefFoundError: org/jaxen/JaxenException 2.XPath 語法示例

/employeers/employeer

從根元素開始逐層找,以”/”開頭

//name

直接獲得所有 name 元素對象,以“//”開頭

//employeer/*

獲得所有employeer元素

 

 

 

 元素的所有子元素對象


//employeer[1]或

//employeer[last()]

獲得所有 employeer 元素的第1個或最后1個

//employeer[@id]

獲得所有帶 id 屬性的 employeer 元素對象

//employeer[@id=‘002']

獲得 id 等于 002 的 employeer 元素對象

3.查詢節點

?     獲得所有符合條件的節點

–      document.selectNodes(String xpathExpression)  返回 List 集合

?     獲得符合條件的單個節點

–      document.selectSingleNode(String xpathExpression)

–    返回1個 Node 對象。如果符合條件的節點有多個,那末返回第1個。


XML SAX 解析

1.  為何會出現 SAX 解析?

在使用 DOM 解析 XML 文檔時,需要讀取全部 XML 文檔,在內存中構架代表全部 DOM 樹的 Doucment 對象,從而再對 XML 文檔進行操作。此種情況下,如果 XML 文檔特 別大,就會消耗計算機的大量內存,并且容易致使內存溢出。

SAX 解析允許在讀取文檔的時候,即對文檔進行處理,而沒必要等到全部文檔裝載完才會文檔進行操作。

注意:sax 只能用于讀取 xml 文件,沒法作更新

2. SAX 采取事件處理的方式解析 XML 文件,利用 SAX  解析 XML  文檔,觸及兩個部份:解 析器和事件處理器(對象):

解析器可使用 JAXP 的 API 創建,創建出 SAX 解析器后,就能夠指定解析器去解析某 個 XML 文檔。

解析器采取 SAX 方式在解析某個 XML 文檔時,它只要解析到 XML 文檔的1個組成部份,都會去調用事件處理器的1個方法,解析器在調用事件處理器的方法時,會把當前解析到的 xml 文件內容作為方法的參數傳遞給事件處理器。

事件處理器由程序員編寫,程序員通過事件處理器中方法的參數,就能夠很輕松地得到

sax 解析器解析到的數據,從而可以決定如何對數據進行處理。

3.解析方式

?      使用 SAXParserFactory 創建 SAX 解析工廠

SAXParserFactory factory = SAXParserFactory.newInstance();

?     通過 SAX 解析工廠得到解析器對象

SAXParser sp = factory.newSAXParser();

?     通過解析器對象得到1個 XML 的讀取器

XMLReader xmlReader = sp.getXMLReader();

?     設置讀取器的事件處理器


—————————————————————————————

xmlReader.setContentHandler(new BookParserHandler());

?     解析 xml 文件

xmlReader.parse("book.xml");


XML Pull 解析

1.  為何會出現 PULL 解析?

Pull 解析與 sax 解析類似都是基于事件方法回調機制來實現對 xml 文件解析。

Sax 解析不足:即便已找到所要的數據,xml 數據還是會全部加載進來并產生方法調 用。程序員沒法停止這些無用的操作,而 pull 解析解決了此問題。

Pull 解析:加載每部份數據產生方法調用,都必須通進程序員調用1個固定的方法才 能進行下去,否則解析工作就停止了。Next()

注意:pull 解析也只能用于讀取 xml 文件,沒法作更新

2. Pull 解析依賴兩個 jar 包:xmlpull_1_0_5.jar 和 kxml2⑵.3.0.jar 3.經常使用接口或類

XmlPullParserFactory XmlPullParser(既是解析器又是數據的存儲器)XmlPullParserException 

業務思想

關于XML的總結自己感覺也是很成心思的,雖然經歷了痛苦演變的整理進程,以后還是很有收獲的。

作為1種可擴大的標記語言,項目中我們還是常常遇到的,所以呢,不能不學習明白哦。對XML的使用,是我們最為關注的,拋磚引玉吧,寫了1些小的demo,希望我們都可以做的更好!


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 涩涩五月天婷婷丁香综合社区 | 日韩中文字幕高清在线专区 | 亚洲国产日本 | 亚洲黄色在线 | 免费一级做a爰片久久毛片潮喷 | 欧美jjzz | 亚洲国产成人在线视频 | 肉体肉体xxxx肉体d | 全国男人的天堂网站 | 中文字幕精品一区二区2021年 | 国产精品亚洲欧美日韩区 | 欧美日韩一区二区视频免费看 | 成年人在线视频免费观看 | 欧美另类激情 | 青青草原手机在线视频 | 久久嫩草影院网站 | 最近中文字幕免费2019高清 | xxx性欧美| 国产成人一区二区三区影院免费 | 国产一区二区三区免费看 | 成人春色在线观看免费网站 | 久久久久亚洲精品一区二区三区 | 免费在线一区二区三区 | 国产成人午夜性a一级毛片 国产成人系列 | 日本一区二区高清不卡 | 97精品一区二区三区在线不卡 | 亚洲资源站资源网在线 | 欧美综合伊人久久 | 狠狠躁天天躁夜夜躁夜天战 | 欧美日韩看片 | 最新中文字幕av专区 | 亚洲天堂免费视频 | 五月婷婷六月丁香综合 | 91久久偷偷做嫩草影院免费看 | 国产亚洲综合久久 | 欧美性受| 欧美最猛黑人xxxx黑人猛交98 | 男女羞羞视频免费 | 欧美日韩一区二区三区麻豆 | 日本一区二区三区在线网 | 国产欧美日韩一区二区三区视频 |