使用PHP DOMDocument添加样式标记

时间:2012-09-11 22:10:53

标签: php css domdocument appendchild createelement

我想在HTML文档的head标记中创建并添加一组<style>标记。

我知道我可以这样开始:

$url_contents = file_get_contents('http://example.com');
$dom = new DOMDocument;
$dom->loadHTML($url_contents);

$new_elm = $dom->createElement('style', 'css goes here');
$elm_type_attr = $dom->createAttribute('type');
$elm_type_attr->value = 'text/css';
$new_elm->appendChild($elm_type_attr);

现在,我也知道我可以像HTML一样将新的样式标签添加到HTML中:

$dom->appendChild($ss_elm);
$dom->saveHTML();

但是,这会产生以下情况:

<html>
<!--Lots of HTML here-->
</html><style type="text/css">css goes here</style>

以上基本上没有意义; CSS没有被解析,只是坐在那里。

我在网上找到了这个解决方案(显然没有用):

$head = $dom->getElementsByTagName('head');
$head->appendChild($new_elm);
$dom->saveHTML();

感谢您的帮助!!

编辑:

有可能吗?

3 个答案:

答案 0 :(得分:5)

$head = $dom->getElementsByTagName('head');

返回DOMNodeList。我认为最好像第一个这样的元素

 $head = $dom->getElementsByTagName('head')->item(0);

所以$ head将是一个DOMNode对象。所以你可以使用appendChild方法。

答案 1 :(得分:5)

getElementsByTagName返回一个节点数组,所以可能会尝试

 $head->[0]->appendChild($new_elm);

答案 2 :(得分:1)

这是对我有用的解决方案

// Create new <style> tag containing given CSS
$new_elm = $dom->createElement('style', 'css goes here');
$new_elm->setAttribute('type', 'text/css');

// Inject the new <style> Tag in the document head
$head = $dom->getElementsByTagName('head')->item(0);
$head->appendChild($new_elm);

您也可以在末尾添加此行以使其缩进

// Add a line break between </style> and </head> (optional)
$head->insertBefore($dom->createTextNode("\n"));