使用DOM / XPATH创建一个容器Div

时间:2018-09-16 23:34:44

标签: php html dom xpath

我刚刚创建了一个新的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元素?

1 个答案:

答案 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>