2010年12月14日

[PHP] XML DOM物件

PHP有DOM物件可以專門用來處理XML文件
但佔用的記憶體量較大,不太適合處理太大的XML文件

windows版本DOM模組已預設有效
linux則還要另外做一些準備設定



使用物件的建立
$doc = new DOMDocument([版本][,文字編碼]);

$doc = new DOMDocument("1.0","utf-8");
$doc = new DOMDocument();

屬性
$doc->formatOutput=false; //輸出時是否格式化(預設:false)
$doc->validateOnParse=false; //解析時是否驗證文件的正確性(預設:false)
$doc->resolveExternals=false; //是否在解析時解開文件外部的定義(預設:false)
$doc->preserveWhiteaSpace=true; //要保留空白字元碼嗎(預設:true)
$doc->substituteEntities=false; //要取代實體參照嗎(預設:false)
$doc->strictErrorChecking=true; //要進行嚴格的錯誤檢查嗎(預設:false)

方法
$doc->load(檔名); //文件載入DOM Tree
$doc->loadXML(字串); //字串載入DOM Tree
$doc->save(檔名); //DOM Tree內容儲存到XML檔案
$doc->saveXML(); //DOM Tree內容以XML字串傳回

屬性(可以取得DOM Tree各種節點物件)
DOMNode = DOMNode->parent_node //上個節點
DOMNode = DOMNode->firstChild //第一個子節點
DOMNode = DOMNode->lastChild //最後一個子節點
DOMNode = DOMNode->previousSibling //上一個兄弟節點
DOMNode = DOMNode->nextSibling //下一個兄弟節點
DOMDocument = DOMNode->ownerDocument //根節點
DOMNodeList = DOMNode->childNodes //所有子節點
DOMNamedNodeMap = DOMNode->attributes //所有屬性
DOMDocumentType = DOMDocument->doctype //文件類型
DOMElement = DOMDocument->documentElement //文件元素
DOMElement = DOMAttr->ownerElement //這屬性屬於的元素

方法
DOMNode = DOMNodeList->item(索引); //第一個索引值0
DOMNode = DOMNode->insertBefore(新節點,子節點) //插入節點
DOMNode = DOMNode->appendChile(新節點)  //新增節點
DOMNode = DOMNode->replaceChild(現有節點,新節點)  //取代節點
DOMNode = DOMNode->removeChild(子節點)  //刪除節點
DOMNodeList = DOMDocument->getElementsById(ID) //從ID屬性的值取得元素節點
DOMNodeList = DOMDocument->getElementsByTagName(標籤名)  //從標籤名稱取得元素節點
DOMNodeList = DOMElement->getElementsByTagName(標籤名)  //從標籤名稱取得元素節點

屬性(可以取得資訊)
DOMNode->nodeName //節點名稱
DOMNode->nodeValue //節點的值
DOMNode->nodeType //節點類型
DOMNode->textContent //節點內容的文字表示
DOMNodeList->length //節點列的長度
DOMDocument->documentURI //XML文件的位置
DOMDocument->encoding //XML宣告的encoding屬性值
DOMDocument->standalone //XML宣告的standalone屬性值
DOMDocument->version //XML宣告的version屬性值
DOMDocument->tagName //元素的標籤名
DOMAttr->name //屬性名稱
DOMAttr->value  //屬性值




範例












讀取XML

<?php
  $doc = new DOMDocument();
  $doc->load( 'books.xml' );
  
  $books = $doc->getElementsByTagName( "book" );
  foreach( $books as $book )
  {
  $authors = $book->getElementsByTagName( "author" );
  $author = $authors->item(0)->nodeValue;
  
  $publishers = $book->getElementsByTagName( "publisher" );
  $publisher = $publishers->item(0)->nodeValue;
  
  $titles = $book->getElementsByTagName( "title" );
  $title = $titles->item(0)->nodeValue;
  
  echo "$title - $author - $publisher\n";
  }
  ?>



沒有留言:

張貼留言