我想在它所在的位置用$styles字符串替换<includes module="styles" />
。不幸的是,它附加在身体而不是头部。不管怎样,也许有另一种方法来认识这个问题?
$xml = <<<EOD
<!DOCTYPE html>
<html>
<head>
<title></title>
<includes module="styles" />
</head>
<body>
<includes module="m1" />
<includes module="m2" />
</body>
</html>
EOD;
$styles = <<<EOD
<styles>
.m1{
font-size: 12px;
font-family: Helvetica, Arial, sans-serif;
color: blue;
}
</styles>
EOD;
$dom = new DOMDocument();
$dom->loadXML($xml);
$elements = $dom->getElementsByTagName('includes');
for ($i = $elements->length-1; $i >= 0; $i--) {
$element = $elements->item($i);
$newNode = $dom->createDocumentFragment();
$mod = $element->getAttribute('module');
if($mod==='styles'): $newNode->appendXML($styles); endif;
$element->parentNode->replaceChild($newNode, $element);
}
print $dom->saveXml($dom->documentElement);
欢呼
您需要将$element->parentNode->replaceChild($newNode, $element);
放在IF子句中。
我还建议使用foreach和大括号(使其更具可读性)
foreach ($dom->getElementsByTagName('includes') as $element) {
$mod = $element->getAttribute('module');
if($mod === 'styles') {
$newNode = $dom->createDocumentFragment();
$newNode->appendXML($styles);
$element->parentNode->replaceChild($newNode, $element);
}
}
我发现了这个bug,非常尴尬!我把<styles>
拼错了。应该是<style>
!显然,它会自动将自定义标签移动到正文中。
@Javad真有趣。因为php测试器在头部留下了错误的样式标签,而不是在我的示例中。也许是因为它与php版本有关?