xml教程
XML 文檔對象模型定義訪問和操作XML文檔的標準方法。
DOM 將 XML 文檔作為一個樹形結(jié)構(gòu),而樹葉被定義為節(jié)點。
XML DOM 把 XML 文檔視為一種樹結(jié)構(gòu)。這種樹結(jié)構(gòu)被稱為節(jié)點樹。
可通過這棵樹訪問所有節(jié)點。可以修改或刪除它們的內(nèi)容,也可以創(chuàng)建新的元素。
XML DOM 定義了訪問和處理 XML 文檔的標準方法。
XML DOM 是 XML Document Object Model 的縮寫,即 XML 文檔對象模型。
?
xml每個成分都是節(jié)點、
根據(jù) DOM,XML 文檔中的每個成分都是一個節(jié)點。
DOM 是這樣規(guī)定的:
- 整個文檔是一個文檔節(jié)點
- 每個 XML 標簽是一個元素節(jié)點
- 包含在 XML 元素中的文本是文本節(jié)點
- 每一個 XML 屬性是一個屬性節(jié)點
- 注釋屬于注釋節(jié)點
?
看一個例子
<?xml version="1.0" encoding="ISO-8859-1"?><bookstore><book category="children"><title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book><book category="cooking"><title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book><book category="web"><title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book><book category="web"><title lang="en">XQuery Kick Start</title> <author>James McGovern</author> <author>Per Bothner</author> <author>Kurt Cagle</author> <author>James Linn</author> <author>Vaidyanathan Nagarajan</author> <year>2003</year> <price>49.99</price> </book></bookstore>第一個 <book> 節(jié)點有四個節(jié)點:<title>, <author>, <year> 以及 <price>,其中每個節(jié)點都包含一個文本節(jié)點,"Harry Potter", "J K. Rowling", "2005" 以及 "29.99"。
注意文本存儲在文本幾點當中
在這個例子中:<year>2005</year>,元素節(jié)點 <year>,擁有一個值為 "2005" 的文本節(jié)點。
"2005"?不是?<year> 元素的值!
在上面的 XML 中,<title> 元素是 <book> 元素的第一個子節(jié)點,而 <price> 元素是 <book> 元素的最后一個子節(jié)點。
此外,<book> 元素是 <title>、<author>、<year> 以及 <price> 元素的父節(jié)點。
?
瀏覽器都內(nèi)建了供讀取和操作 XML 的 XML 解析器。
解析器把 XML 讀入內(nèi)存,并把它轉(zhuǎn)換為可被 JavaScript 訪問的 XML DOM 對象。
?
所有的解析器都含有遍歷 XML 樹、訪問、插入及刪除節(jié)點的函數(shù)。
?
js
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");//微軟的 XML 解析器/* xmlDoc= document.implementation.createDocument("","",null); //在 Firefox 及其他瀏覽器中的 XML 解析器 */ xmlDoc.async="false"; xmlDoc.load("books.xml"); //loadXML()?方法用于加載字符串(文本),而?load()?用于加載文件。
- 第一行創(chuàng)建空的微軟 XML 文檔對象
- 第二行關(guān)閉異步加載,這樣可確保在文檔完整加載之前,解析器不會繼續(xù)執(zhí)行腳本
- 第三行告知解析器加載名為 "books.xml" 的文檔
Internet Explorer 使用?loadXML()?方法來解析 XML 字符串,而其他瀏覽器使用?DOMParser?對象。
例如:
parser=new DOMParser(); xmlDoc=parser.parseFromString(txt,"text/xml");- 第一行創(chuàng)建一個空的 XML 文檔對象
- 第二行告知解析器加載名為 txt 的字符串
跨瀏覽器例子
try //Internet Explorer {xmlDoc=new ActiveXObject("Microsoft.XMLDOM");} catch(e){try //Firefox, Mozilla, Opera, etc. {xmlDoc=document.implementation.createDocument("","",null);}catch(e) {alert(e.message)}} try {xmlDoc.async=false;xmlDoc.load("books.xml");document.write("xmlDoc is loaded, ready for use");} catch(e) {alert(e.message)出于安全方面的原因,現(xiàn)代的瀏覽器不允許跨域的訪問。
這意味著,網(wǎng)頁以及它試圖加載的 XML 文件,都必須位于相同的服務器上。
假如你打算在自己的網(wǎng)頁上使用上面的例子,則必須把 XML 文件放到自己的服務器上。否則,xmlDoc.load() 將產(chǎn)生錯誤 "Access is denied"。
?
XML DOM 含有遍歷 XML 樹以及訪問、插入、刪除節(jié)點的方法(函數(shù))。
然后,在訪問并處理 XML 文檔之前,必須把它載入 XML DOM 對象。
?
一些典型的 DOM 屬性:
- x.nodeName - x 的名稱
- x.nodeValue - x 的值
- x.parentNode - x 的父節(jié)點
- x.childNodes - x 的子節(jié)點
- x.attributes - x 的屬性節(jié)點
注釋:在上面的列表中,x 是一個節(jié)點對象。
- x.getElementsByTagName(name) - 獲取帶有指定標簽名稱的所有元素
- x.appendChild(node) - 向 x 插入子節(jié)點
- x.removeChild(node) - 從 x 刪除子節(jié)點
注釋:在上面的列表中,x 是一個節(jié)點對象。
三個重要的 XML DOM 節(jié)點屬性是:
- nodeName
- nodeValue
- nodeType
?
nodeName 屬性規(guī)定節(jié)點的名稱。
- nodeName 是只讀的
- 元素節(jié)點的 nodeName 與標簽名相同
- 屬性節(jié)點的 nodeName 是屬性的名稱
- 文本節(jié)點的 nodeName 永遠是 #text
- 文檔節(jié)點的 nodeName 永遠是 #document
nodeValue 屬性規(guī)定節(jié)點的值。
- 元素節(jié)點的 nodeValue 是 undefined
- 文本節(jié)點的 nodeValue 是文本自身
- 屬性節(jié)點的 nodeValue 是屬性的值
?
例子
?
<?php $doc = new DOMDocument('1.0','utf-8');$content = file_get_contents('http://feed.cnblogs.com/blog/u/530411/rss');$doc->loadXML($content);$ts = $doc->getElementsByTagName('entry'); $arr=array(); ///*獲取內(nèi)容 原文鏈接 作者姓名 摘要 修改時間*/ foreach ($ts as $value) {//鏈接$writer= '作者'.$value->getElementsByTagName('author')->item(0)->childNodes->item(1)->nodeValue.'<br/>';$import='文章摘要'.$value->getElementsByTagName('content')->item(0)->textContent.'<br/>';$pushtime='發(fā)布時間'.$value->getElementsByTagName('published')->item(0)->textContent; $arr[]=array( 'writer'=>$writer, 'import'=>$import, 'pushtime'=>$pushtime); }print_r($arr);在 XML DOM 中,節(jié)點的關(guān)系被定義為節(jié)點的屬性:
- parentNode
- childNodes
- firstChild
- lastChild
- nextSibling
- previousSibling
?
節(jié)點操作:
獲取屬性值
?txt=xmlDoc.getElementsByTagName("title")[0].getAttribute("lang");
?
?
在 DOM 中,每種成分都是節(jié)點。元素節(jié)點沒有文本值。
元素節(jié)點的文本存儲在子節(jié)點中。該節(jié)點稱為文本節(jié)點。
獲取元素文本的方法,就是獲取這個子節(jié)點(文本節(jié)點)的值。
?
設置屬性值?
x[0].setAttribute("category","child");//設置節(jié)點的某個屬性的值 y=x.getAttributeNode("category");
//現(xiàn)獲取該屬性 設置屬性 y.nodeValue="child";
轉(zhuǎn)載于:https://www.cnblogs.com/webcyh/p/11287872.html
總結(jié)
- 上一篇: 知乎:GAN 的发展对于研究通用人工智能
- 下一篇: 利用docker中的nginx镜像部署a