1. 程式人生 > >xml基本概念總結

xml基本概念總結

xml的重點主要是 
1.特點
2.語法規範
3.解析與建立
4.DTD(文件型別定義) 【還有Schema 以後可以自行學習的,暫時還沒有看】


DOMDocument 來解析 xml
步驟主要是,一步一步深入,思路明確,但是比較麻煩
1.得到面
$xml = new Document("1.0", "utf-8");
$xml->load('xxx.xml');


2.得到線(得到節點元素)
$xml->getElementByTagName('節點名')-


3.得到點
$nodelist->item(0/1/2.....);
基本概念
1.計算機中用於資訊的交換,分離樣式和資料,單獨得到資料
2.xml是學習webserver和ajax的基礎,沒有替換掉html之後,出現了xhtml(擴充套件的超文字語言)
3.xml定義
xml屬於可擴充套件性語言,類似於html,是一種標記語言
目的:傳輸資料
4.xml特點
可以自行定義標籤,並且標籤名不能是陣列開頭
xml和html最大的區別就是資料和樣式分離


語法規範
//宣告部分--只能這麼寫
<?xml version="1.0" encoding="utf-8"?> 
//節點部分--xml 中所有都是節點(普通節點、文字節點(換行節點、空白節點))
//只有一個根節點、成對出現(允許<br/><img/>單便籤)
//屬性儘量小寫,屬性值只能是 string 型別.必須將""
<root><aa id='12'><bb><br/>你好</bb></aa></root>
//註釋
<!-- 我是註釋 -->
//特殊字元--用實體代替
&lt; &gt; &quot; &amp; &apos;
< >     ""     &     ''//其實只有< 和 & 是非法的,但是最好全攜程實體字元
如果存在大段文字 建議使用 CDATA 節點
<![CDATA[]]>
//擁有正確的語法的XML文件是像是"形式良好"
1. xml 文件必須有根目錄
2. xml 文件必須有關閉目錄
3. xml 標籤對大小寫感興趣
4. xml 元素必須被正確的巢狀
5. xml 屬性必須加""


DOM 解析 XML (解析xml的標準叫做DOM標準,xml和html都遵守DOM標準,所以PHP,c,js解析是必須遵守DOM標準)
1.使用 getElementsByTagName() 和 childNode()
JS解析中有 getElementsByTagName(),getElementsByClassName(),getElementById(只有ID是Element,沒有s)
2.PHP的DOM 解析 XML 步驟
1.讀取xml文件(建立DOM物件,讀取文件)
2.通過getElementsByTagName() 獲取物件
3.把 2 中的一組物件挑選節點->item(0) 

//建立DOM物件,讀取xml文件
$dom = new DOMDocument("1.0","utf-8"); 
$dom->load('001.xml');


//得到tital節點
$ts = $dom->getElementsByTagName('tital'); //返回的是節點列表物件 Object DOMNodelist
$ts->length; //節點列表個數
$ts->item(0)->whoText; //第一個節點的文字內容


//一下兩個效果一樣。
childNodes ==> 返回子節點的集合
nodeValue  ==> 返回節點值
$dom->getElementsByTagName('title')->item(0)->nodeValue;
$dom->getElementsByTagName('title')->item(0)->childNodes->item(0)->wholeText;




DOM 建立 XML (自己製作API的時候需要用到)
1.建立文字節點、普通節點、屬性節點、CDATA節點
2.新增到父節點中


//建立DOM物件
$dom = new DOMDocument("1.0", "utf-8");


//建立文字節點、普通節點、CDATA節點、屬性節點
$text = $dom->createTextNode('你好');
$name = $dom->createElement('name');
$cdata = $dom->createCDATASection('這本書<>很好');
$attr = $dom->createAttribute('goods_id');
$attr->value = '001';


//新增節點
$name->appendChild($text);

//輸出或者儲存
header('content-type:text/xml');
echo $dom->savaxml($dom);
$dom->save('./02.xml');


DOM 刪除和修改 XML節點
//建立DOM物件,載入頁面
$dom = new DOMDocument("1.0", "utf-8");
$dom->load('001.xml');


//找到節點
$t1 = $dom->getElementsByTagName('book')->item(0);

//修改節點中的內容,使用replaceChild()
$newt1 = $dom->createTextNode('999');
$t1->replaceChild($newt1,$t1->firstChild)


//刪除節點==>使用parentNode()找到父節點,再呼叫removeChild()刪除自己
$t1->parentNode->removeChild($t1);

//儲存或者輸出
header('content-tyep:text/xml');
echo $dom->savexml();
$dom->save('01.xml');