如果您想要使用 createElement、appendChild 等來建立新文件,則建構子的引數很有用。
相反地,一旦您透過呼叫 load() 或 loadXML() 從來源載入文件,這些引數就會被覆寫。
* 如果來源包含指定編碼的 XML 宣告,則會使用該編碼。
* 如果 XML 宣告未指定編碼,或如果來源根本不包含宣告,則會假設為 UTF-8。
無論您在呼叫 new DOMDocument() 時宣告了什麼,此行為都適用。
(PHP 5,PHP 7,PHP 8)
DOMDocument::__construct — 建立新的 DOMDocument 物件
建立新的 DOMDocument 物件。
version
文件的版本號碼,作為 XML 宣告的一部分。
encoding
文件的編碼,作為 XML 宣告的一部分。
範例 1 建立新的 DOMDocument
<?php
$dom = new DOMDocument('1.0', 'iso-8859-1');
echo $dom->saveXML(); /* <?xml version="1.0" encoding="iso-8859-1"?> */
?>
如果您想要使用 createElement、appendChild 等來建立新文件,則建構子的引數很有用。
相反地,一旦您透過呼叫 load() 或 loadXML() 從來源載入文件,這些引數就會被覆寫。
* 如果來源包含指定編碼的 XML 宣告,則會使用該編碼。
* 如果 XML 宣告未指定編碼,或如果來源根本不包含宣告,則會假設為 UTF-8。
無論您在呼叫 new DOMDocument() 時宣告了什麼,此行為都適用。
請注意在建構子中使用編碼參數。
這並不表示所有資料都會自動以您提供的編碼進行編碼。一旦您選擇了 UTF-8 預設值以外的編碼,您需要自己執行此操作。請參閱關於 DOM 函式的筆記,了解如何正確處理其他編碼...
建構子範例清楚地顯示版本和編碼只會出現在 XML 標頭中。
@Jarl
我不確定您說「建構子範例清楚地顯示版本和編碼只會出現在 XML 標頭中」時是否是指這個,但您也可以透過存取 DOMDocument 的屬性來影響產生的 XML 標頭中的其他參數,例如
<?php
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->xmlStandalone = false;
echo $dom->saveXML();
// <?xml version="1.0" encoding="UTF-8" standalone="no"?>
請確保在使用 domdocument 類別之前,移除 Windows 上的 php_domxml.dll,因為它們無法共存。
domdocument::domdocument() 至少需要
至少,我發現這是由於 ZEND 優化器,解除安裝它後,運作良好,但速度會變慢 :-(。
評論
項目 1:2008-10-03 17:10:58,gkrong 說
「警告:domdocument::domdocument() 至少需要 1 個
參數」
如果您在 Windows 中使用 PHP 5,則不需要宣告
php.ini 檔案中的 php_domxml.dll。
所以您可以在您的 php.ini 檔案中的 php_domxml.dll 行中加上註解。
php.ini 檔案。
您只需要將其註解掉,但不要刪除
ext 目錄中的 php_domxml.dll 檔案。
如果您針對像這樣的程式碼範例收到錯誤訊息「domdocument::domdocument() 預期參數 2 為長整數,但給定字串」
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->xmlStandalone = false;
echo $dom->saveXML();
如果您比較建構子簽名,這顯然是正確的
__construct ([ string $version [, string $encoding ]] )
請確保您沒有被另一個 dom 程式庫覆寫這個 dom 程式庫 (例如 php.ini 中的 extension=php_domxml.dll)。例如,XAMPP 提供其標準版本以及 php_domxml.dll,這會導致此錯誤訊息
為了擴展 bholbrook 的評論,如果您收到此訊息:「警告:domdocument::domdocument() 至少需要 1 個參數」,這是由於舊的 domxml 擴充功能,您需要停用它。
domxml 使用 domxml_open_mem 的別名覆寫 DOMDocument::_construct,因此這段程式碼
<?php
$doc = new DOMDocument();
?>
...基本上會執行此操作
<?php
$dom = domxml_open_mem();
?>
...這就是為什麼 PHP 會抱怨至少需要 1 個參數(它預期為 XML 字串)。
在這篇文章 http://softontherocks.blogspot.com/2014/11/descargar-el-contenido-de-una-url_11.html 中,我找到了一種使用 DOMDocument、loadHTMLFile 和 saveHTML() 取得 URL 內容的簡單方法。
function getURLContent($url){
$doc = new DOMDocument;
$doc->preserveWhiteSpace = FALSE;
@$doc->loadHTMLFile($url);
return $doc->saveHTML();
}