我刚刚创建了一个新的DOM XPATH对象。
然后,经过几次操作,我将结果存储在SaveHtml
$String[] = $dom->saveHTML();
然后,我将内容放入文件中。
file_put_contents($filename, $string);
HTML结构是这样的。
<div if="rand11">
</div>
<div if="rand24">
</div>
<div if="rand51">
</div>
有一些方法可以创建新的div。您可以使用->createElement
。另外,您可以使用->parentNode->insertBefore
放置此新元素,但无法像这样创建容器div。
<div if="container-div">
<div if="rand11">
</div>
<div if="rand24">
</div>
<div if="rand51">
</div> </div>
我尝试了多种方法来完成该任务,但未成功。
所以,我有几个问题:
1。是否可以创建直接修改Dom的Container Div?
2。是否可以在包含$dom->saveHTML();
数据的数组中添加新的HTML元素?
答案 0 :(得分:0)
可以。实际上大多数都使用相同的方法。例如appendChild()/insertBefore()
不仅用于新节点,还可以移动现有节点。
$html = <<<'HTML'
<div if="rand11"></div>
<div if="rand24"></div>
<div if="rand51"></div>
HTML;
$document = new DOMDocument();
$document->loadHTML($html);
$xpath = new DOMXpath($document);
// fetch the nodes that should be put inside the container
$nodes = $xpath->evaluate('//div[starts-with(@if, "rand")]');
// validate that here is at least one node
if ($first = $nodes[0]) {
// create the container and insert it before the first
$container = $first->parentNode->insertBefore(
$document->createElement('div'), $first
);
$container->setAttribute('class', 'container-div');
// move all the fetched nodes into the container
foreach($nodes as $node) {
$container->appendChild($node);
}
// output formatted
$document->formatOutput = TRUE;
echo $document->saveHTML($container);
}
输出:
<div class="container-div">
<div if="rand11"></div>
<div if="rand24"></div>
<div if="rand51"></div>
</div>