DomIt! 是 PHP 4/5 相容的輕量級 DOM XML 庫,單檔案、無依賴、API 直觀、原始碼可讀性高,適合簡單 XML 處理任務 (配置檔、資料交換、Flash 通訊等)。現代專案建議改用原生 DOMDocument 或 SimpleXML,但理解 DomIt! 有助於掌握 DOM 核心概念。
DOMIT_Document:文件根節點,createElement()、appendChild()、toString()DOMIT_Element:元素節點,setAttribute()、getAttribute()、getElementsByTagName()、getText()、setText()DOMIT_Node:基底節點介面<?php
require_once 'xml_domit_include.php'; // DomIt! 入口檔
// 1. 建立文件實例
$xmlDoc =& new DOMIT_Document();
// 2. XML 宣告 (處理指令)
$xmlDecl =& $xmlDoc->createProcessingInstruction('xml', 'version="1.0" encoding="UTF-8"');
$xmlDoc->appendChild($xmlDecl);
// 3. 根元素
$root =& $xmlDoc->createElement('audio');
$xmlDoc->appendChild($root);
// 4. 子元素建立輔助函式
function addElement(&$parent, $tag, $text = '', $attrs = []) {
$doc = $parent->ownerDocument ?? $parent; // 相容根節點
$elem =& $doc->createElement($tag);
if ($text !== '') $elem->setText($text);
foreach ($attrs as $k => $v) $elem->setAttribute($k, $v);
$parent->appendChild($elem);
return $elem;
}
// 5. 建立音樂項目
$file = addElement($root, 'file');
addElement($file, 'track', 'music/song01.mp3');
addElement($file, 'caption', '夏日旋律');
addElement($file, 'record', '2023 現場錄製');
// 另一首
$file2 = addElement($root, 'file');
addElement($file2, 'track', 'music/song02.mp3');
addElement($file2, 'caption', '冬日暖陽');
addElement($file2, 'record', '2023 室內錄製');
// 6. 輸出
header('Content-Type: application/xml; charset=utf-8');
echo $xmlDoc->toString(true); // true = 格式化縮排
/* 輸出結果:
<?xml version="1.0" encoding="UTF-8"?>
<audio>
<file>
<track>music/song01.mp3</track>
<caption>夏日旋律</caption>
<record>2023 現場錄製</record>
</file>
<file>
<track>music/song02.mp3</track>
<caption>冬日暖陽</caption>
<record>2023 室內錄製</record>
</file>
</audio>
*/
<?php
// 載入既有 XML
$xmlDoc =& new DOMIT_Document();
$xmlDoc->loadXML($xmlString); // 或 loadFile('audio.xml')
// 1. 取得所有 <file> 元素
$files = $xmlDoc->getElementsByTagName('file');
foreach ($files as $file) {
$track = $file->getElementsByTagName('track')->item(0);
$caption = $file->getElementsByTagName('caption')->item(0);
echo "曲目: " . $track->getText() . " - " . $caption->getText() . "\n";
}
// 2. 修改特定曲目標題
$files = $xmlDoc->getElementsByTagName('file');
foreach ($files as $file) {
$track = $file->getElementsByTagName('track')->item(0);
if ($track->getText() === 'music/song01.mp3') {
$caption = $file->getElementsByTagName('caption')->item(0);
$caption->setText('夏日旋律 (Remix)');
}
}
// 3. 新增屬性
$file->setAttribute('id', 'song_001');
$file->setAttribute('duration', '240');
// 4. 刪除元素
$oldFile = $xmlDoc->getElementsByTagName('file')->item(0);
$root = $xmlDoc->documentElement;
$root->removeChild($oldFile);
// 5. 儲存
$xmlDoc->toString(true); // 取得字串
// 或寫入檔案
file_put_contents('audio_updated.xml', $xmlDoc->toString(true));
<?php
$root =& $xmlDoc->createElementNS('https://example.com/ns', 'ns:audio');
$xmlDoc->appendChild($root);
// 後續元素同樣用 createElementNS
<?php
$cdata =& $xmlDoc->createCDATASection('包含 <特殊> & 字元的內容');
$element->appendChild($cdata);
<?php
$xpath = new DOMIT_XPath($xmlDoc);
$nodes = $xpath->query('//file[caption="夏日旋律"]/track');
foreach ($nodes as $node) {
echo $node->getText();
}
| DomIt! | DOMDocument (原生) | 備註 |
|---|---|---|
new DOMIT_Document() | new DOMDocument('1.0', 'UTF-8') | |
createElement() | createElement() | |
appendChild() | appendChild() | |
setText() | appendChild($doc->createTextNode($text)) | 原生無 setText |
getText() | $node->textContent | |
toString(true) | $doc->saveXML() + $doc->formatOutput = true | |
loadXML() | loadXML() | |
| XPath | new DOMXPath($doc) | 功能更強大 |