【问题标题】:Using PHP DOM replaceChild to replace a node with a text node使用 PHP DOM replaceChild 将节点替换为文本节点
【发布时间】:2018-03-25 20:16:31
【问题描述】:

我正在浏览一个 DOMDocument,当我到达某些标签时,我需要保留它们的内容但删除标签。为此,我尝试用文本节点替换原始节点。

$child = $section->childNodes->item($i);
switch ($child->tagName) {
  case 'dontNeedIt':
    $child->parentNode->replaceChild(new DOMText($child->textContent), $child);

之后我希望 $child 成为一个文本节点,但没有任何变化。

【问题讨论】:

    标签: php dom


    【解决方案1】:

    请试试这个,我只是取了一个字符串值,在其中放置了一些锚点标签,并从其节点值中替换了每个锚点标签。

    <?php
    
    $contents = 'Lorem ipsum dolor sit amet, metus <a href="first.html">First Anchor</a> curabitur orci feugiat aliquam, lorem aenean nobis quisque, pellentesque odio ut, augue duis nisl aliquam tortor inceptos, sed habitasse mauris. Enim eu suspendisse elementum, diam congue aliqua in accumsan eu nunc, cras quam nam magnis. Pellentesque aliquet tristique neque eu faucibus <a href="second.html">Second Anchor</a>, duis nulla. Cursus aliquet faucibus ut, felis sociosqu rhoncus magnis faucibus, urna at nunc euismod mauris. Tortor condimentum natoque metus neque sint in, eu convallis egestas id nulla quisque cupidatat, duis aptent sed nec iaculis praesent elementum. Volutpat velit libero id ridiculus, ut posuere nec. Parturient donec suspendisse, <a>Lorry Ipsum</a> nisl aliquam, venenatis elementum sed suscipit fermentum in, est blandit sagittis luctus ipsum at. Nisl consectetuer molestie ullamcorper senectus velit turpis, <a href="https://stackoverflow.com/questions/37964378/domelement-replace-html-value">Stack overflow</a> suspendisse erat neque wisi, arcu libero, fringilla vitae pede, turpis molestiae pellentesque. <a href="http://php.net/manual/en/domnode.appendchild.php">Contact Us</a>';
    
    $dom = new DOMDocument;
    @$dom->loadHTML($contents);
    
    echo $contents;
    
    $elements = $dom->getElementsByTagName("a");
    for ($i = $elements->length - 1; $i >= 0; $i --) {
        $nodePre = $elements->item($i);
        //$nodeDiv = $dom->createElement("span", $nodePre->nodeValue);
        //$nodePre->parentNode->replaceChild($nodeDiv, $nodePre); way to replace with new node
        $nodePre->parentNode->replaceChild(new DOMText($nodePre->nodeValue), $nodePre); // way to replace with node value
    }
    echo $dom->saveXML(); // $dom->saveHTML() according to requirement
    
    ?>
    

    输出:

      <?xml version="1.0" standalone="yes"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
    <html><body><p>Lorem ipsum dolor sit amet, metus First Anchor curabitur orci feugiat aliquam, lorem aenean nobis quisque, pellentesque odio ut, augue duis nisl aliquam tortor inceptos, sed habitasse mauris. Enim eu suspendisse elementum, diam congue aliqua in accumsan eu nunc, cras quam nam magnis. Pellentesque aliquet tristique neque eu faucibus Second Anchor, duis nulla. Cursus aliquet faucibus ut, felis sociosqu rhoncus magnis faucibus, urna at nunc euismod mauris. Tortor condimentum natoque metus neque sint in, eu convallis egestas id nulla quisque cupidatat, duis aptent sed nec iaculis praesent elementum. Volutpat velit libero id ridiculus, ut posuere nec. Parturient donec suspendisse, Lorry Ipsum nisl aliquam, venenatis elementum sed suscipit fermentum in, est blandit sagittis luctus ipsum at. Nisl consectetuer molestie ullamcorper senectus velit turpis, Stack overflow suspendisse erat neque wisi, arcu libero, fringilla vitae pede, turpis molestiae pellentesque. Contact Us</p></body></html>
    

    【讨论】:

      猜你喜欢
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      • 1970-01-01
      • 2014-02-01
      相关资源
      最近更新 更多