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

PHP 使用 DOMDocument 創建 XML 文檔:從數據庫到 XML 的完整實踐

     編輯:PHP 相關知識

場景介紹

在 Zend Framework 等 MVC 框架中,常需將數據庫查詢結果輸出為標準 XML 供前端或第三方接口消費。DOMDocument 提供了結構化、編碼安全的構建方式。

目標 XML 結構

<?xml version="1.0" encoding="UTF-8"?>
<data>
  <project id="1"><![CDATA[Docker JCP1]]></project>
  <project id="2"><![CDATA[Docker JCP2]]></project>
  ...
</data>

控制器實現代碼

<?php
class TestController extends Zend_Controller_Action
{
    public function projectAction()
    {
        // 1. 初始化 DOMDocument,指定版本與編碼
        $dom = new DOMDocument('1.0', 'utf-8');

        // 2. 創建根節點 <data>
        $root = $dom->createElement('data');
        $dom->appendChild($root);

        // 3. 模擬從數據庫獲取的數據集
        $list = [
            ['project_id' => 1, 'name' => 'Docker JCP1'],
            ['project_id' => 2, 'name' => 'Docker JCP2'],
            // ... 更多記錄
        ];

        // 4. 遍歷數據構建子節點
        foreach ($list as $project_item) {
            // 4.1 創建 <project> 元素
            $projectNode = $dom->createElement('project');
            $root->appendChild($projectNode);

            // 4.2 添加 CDATA 區段(保護特殊字符)
            $cdata = $dom->createCDATASection($project_item['name']);
            $projectNode->appendChild($cdata);

            // 4.3 創建並設置 id 屬性
            $idAttr = $dom->createAttribute('id');
            $projectNode->appendChild($idAttr);

            // 4.4 為屬性節點創建文本值
            $idValue = $dom->createTextNode($project_item['project_id']);
            $idAttr->appendChild($idValue);
        }

        // 5. 輸出 XML
        $output = $dom->saveXML();

        // 6. 設置響應頭並禁用佈局(Zend Framework 特有)
        $this->_response->setHeader('Content-Type', 'text/xml; charset=utf-8')
                           ->setBody($output);
        $this->_helper->layout->disableLayout();
    }
}
?>

關鍵步驟解析

  1. createElement vs createTextNode:元素節點用 createElement,純文本用 createTextNode,CDATA 用 createCDATASection。
  2. 屬性創建流程:createAttribute('name') → appendChild 到元素 → createTextNode('value') → appendChild 到屬性節點。
  3. 編碼處理:構造函數指定 'utf-8',配合 saveXML() 自動處理實體轉義,CDATA 區段內容不轉義。

常見需求擴展

保存為文件

$dom->save('projects.xml'); // 直接寫入文件系統

格式化輸出(美化縮進)

$dom->formatOutput = true;
$output = $dom->saveXML();

添加 XML 樣式表關聯

$pi = $dom->createProcessingInstruction('xml-stylesheet', 'type="text/xsl" href="style.xsl"');
$dom->insertBefore($pi, $root);

最佳實踐建議

  • 大數據集時考慮分批輸出或使用 XMLWriter (流式寫入) 降低內存峰值。
  • 嚴格驗證輸出 XML 符合目標 Schema (XSD),可用 $dom->schemaValidate('schema.xsd')。
  • 接口對外時設置合理的 Cache-Control、ETag 減少重複生成。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved