首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

DomIt! 輕量級 XML 處理庫實戰:建立、查詢、修改與儲存

     編輯:PHP 相關知識

為什麼選擇 DomIt!

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:基底節點介面

建立 XML 文件完整範例

<?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>
*/

查詢與修改 XML

<?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

CDATA 區段

<?php
$cdata =& $xmlDoc->createCDATASection('包含 <特殊> & 字元的內容');
$element->appendChild($cdata);

XPath 查詢 (需 DOMIT_XPath 類別)

<?php
$xpath = new DOMIT_XPath($xmlDoc);
$nodes = $xpath->query('//file[caption="夏日旋律"]/track');
foreach ($nodes as $node) {
    echo $node->getText();
}

遷移至原生 DOMDocument 建議

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()
XPathnew DOMXPath($doc)功能更強大

適用場景總結

  • ✅ 簡單 XML 產生/修改、舊專案維護、PHP 4 相容需求
  • ❌ 大型 XML、高效能需求、複雜 XPath/Schema 驗證、現代專案 (用原生 DOM/SimpleXML)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved