Array to XML:如何将HTML作为对象导入DOMDocument?

时间:2011-11-13 12:29:59

标签: php arrays domdocument

  

可能重复:
  How to insert HTML to PHP DOMNode?
  PHP and DOMDocument

我正在尝试编写一个使用DOMDocument将数组转换为XML的类 - 并在此基础上将HTML导入DOM文档。问题是HTML没有导入到DOM文档中 - 它作为文本字符串导入(例如,HTML标记在生成的XML文档的源代码中显示为&lt;p&gt;而不是<p>

更新 根据Hakre的要求,代码直接添加到本课题中。代码有点被黑,但是有效 - 虽然如Hakar所建议的那样摆脱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:请不要关闭该问题,因为我不认为这是重复的。感谢。

1 个答案:

答案 0 :(得分:0)

在第二行代码的第15行尝试html_entity_decode($value),但为什么要将HTML作为HTML,因为它会被解释为XML。

<强>更新 抱歉,上面的一个不起作用,这也不起作用:

$this
    ->createElement($element)
    ->createTextNode(is_array($value) ? null : $value ));

Finaly 我自己试了一下:

我认为这是最好的解决方案:http://codepad.org/PpyewkVd