可能重複:
How to insert HTML to PHP DOMNode?
PHP and DOMDocument數組到XML:如何將HTML作爲對象導入到DOMDocument?
我想寫轉換使用DOM文檔數組XML一類 - 以及最重要的是進口HTML到DOM文檔。問題在於HTML未導入到DOM文檔中 - 它以文本字符串的形式導入(例如,HTML標記在結果XML文檔的源中顯示爲<p>
而不是<p>
)。
更新: 代碼直接添加到這個問題Hakre要求。該代碼有點被黑客攻擊,但工作原理 - 儘管如Hakre所建議的那樣擺脫DomDocument的擴展會很有趣。
class xmlizer extends DomDocument {
function __construct() {
parent::__construct();
}
function node_create($arr, $items = null) {
if (is_null($items))
$items = $this->appendChild($this->createElement("items"));
// Loop the array values.
foreach($arr as $element => $value) {
// If Array has numeric keys, use "node - else use $element.
$element = is_numeric($element) ? "node" : $element;
// Create element, add $value unless $value is an array - and append to main object ($items).
$fragment = $this->createElement($element, (is_array($value) ? null : $value));
$items->appendChild($fragment);
// Iterate if $value is an array, .
if (is_array($value)) {
self::node_create($value, $fragment);
}
}
}
public function __toString() {
// html_entity_decode() added by Micha. Thanks.
return html_entity_decode($this->saveXML());
}
}
// Build test Array with HTML string (for testing purposes only).
for($i=0;$i<3;$i++) {
$j = $i+1;
$array['example'][] = array(
"id" => $j,
"title" => "Title $j",
"description" => "<p>Text <strong>string</strong> nr. $j with <em>some</em> <code>HTML code</code>.</p>",
);
}
// Test: Run the code.
header("Content-Type:text/xml");
$xml = new xmlizer();
$xml->node_create($array);
echo $xml;
PS:請不要關閉問題,因爲我不認爲這是重複的。謝謝。
@hakre:建議的解決方案是使用SimpleXML而不是DOM - 我選擇不使用SimpleXML,因爲SimpleXML似乎有問題支持輸出格式和CDATA元素。 –
那麼[SimpleXML和DOMDocument是可以互換的](http://php.net/manual/en/function.dom-import-simplexml.php)(並且鏈接的答案也顯示了我的第一條評論)。關於CDATA你是對的,但也有'LIBXML_NOCDATA'(比較[讀取來自RSS源的cdata](http://stackoverflow.com/questions/8020181/read-cdata-from-a-rss-feed/8020274 #8020274))。並不是說這樣可以解決所有問題,但是您也可以對DOMDocument進行相同的處理,以及Gordon的鏈接。總的來說,如果仔細觀察,所有內容都是指DOMDocument。 – hakre
我試過[戈登的createDocumentFragment()示例](http://stackoverflow.com/questions/4751437/php-dom-append-source-html-to-a-domelement),但無法獲得正確的對象(請參閱[代碼](http://codepad.org/jy31rKAo))。任何幫助將不勝感激。 –