產生 XML 檔案曾遇到過的疑惑

從接觸到 XML 領域後,就知道可以應用 DOM 來產生 XML 文件檔案。
而且,幾乎提到產生 XML 檔案的書籍,也都會提到下列相似的程式碼(以 PHP 為範例)

<?php
$dom = new DOMDocument('1.0', 'utf8');

$root = $dom->createElement('companies');      // 建立根元素 <companies>
$root = $dom->appendChild($root);

// 建立新的 <company> 節點
$company = $dom->createElement("company");
$root->appendChild($company);

// 建立 <company> 節點的子節點 <name>
$name = $dom->createElement("name");
$name->nodeValue = "清松資訊股份有限公司";
$company->insertBefore($name, $company->firstChild);

$short = $dom->createElement("short");
$short->nodeValue = "清松圖書";
$company->appendChild($short);

// 儲存 XML 文件 publisher.xml
$dom->save('publisher.xml');
?>

上述程式碼,會產生如下結果:
<?xml version="1.0" encoding="utf8"?>
<companies><company><name>清松資訊股份有限公司</name><short>清松圖書</short></company></companies>

但是,使用 Chrome 瀏覽器觀看,則正常。(** 有 提醒 訊息)
image

難道,產生的文件檔案一定要由程式中,自動加入"內縮"的空白字元?

針對這疑惑,終於找到好的解決方法。

只要在 存檔 save() 之前,加一指令即可改善。

// 會讓 xml 文件以有換行、內縮效果
$dom->formatOutput = true;

新修正的程式碼:

<?php
$dom = new DOMDocument('1.0', 'utf8');

$root = $dom->createElement('companies');      // 建立根元素 <companies>
$root = $dom->appendChild($root);

// 建立新的 <company> 節點
$company = $dom->createElement("company");
$root->appendChild($company);

// 建立 <company> 節點的子節點 <name>
$name = $dom->createElement("name");
$name->nodeValue = "清松資訊股份有限公司";
$company->insertBefore($name, $company->firstChild);

$short = $dom->createElement("short");
$short->nodeValue = "清松圖書";
$company->appendChild($short);

// 會讓 xml 文件以有換行、內縮效果
$dom->formatOutput = true;

// 儲存 XML 文件 publisher.xml
$dom->save('publisher.xml');
?>

上述程式碼,會產生如下結果:
<?xml version="1.0" encoding="utf8"?>
<companies>
  <company>
    <name>清松資訊股份有限公司</name>
    <short>清松圖書</short>
  </company>
</companies>

沒有留言: