剥离外部元素,即。用php解析器删除父级

时间:2011-12-30 21:47:34

标签: php parsing domdocument

我正在使用解析器将某些span元素更改为相应的标题元素。我有以下代码:

$headingReplace[1]['h']     = 'h1';
$headingReplace[1]['string']    = '/html/body//span[@class="heading1"]';            $headingReplace[1]['h']     = 'h1';

    foreach($headingReplace as $heading){
        foreach ($xp->query($heading['string']) as $span) {
            $h1 = $dom->createElement($heading['h']);
            $h1->setAttribute('class', $span->getAttribute('class'));
            while($span->childNodes->length > 0) {
                $h1->appendChild($span->childNodes->item(0));
            }
            $span->parentNode->replaceChild($h1, $span);
        }   
    }
    return $dom->saveHtml();

一切正常,但跨度也包含在p标签中,例如

<p><span class="heading1">Blah Blah</span></p>

我要删除的内容。我想在'appendChild'行后,我想要一行'removeParent',但我无法让它工作。有什么想法吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

不应该$ span-&gt; parentNode-&gt; parentNode-&gt; replaceChild($ h1,$ span-&gt; parentNode);做你想做的事情?

为了在给定节点之后添加节点,您可以使用类似(未经测试的!):

if ($h1->nextSibling) {
    $h1->parentNode->insertBefore($h1->nextSibling, $dom->createElement('br'));
} else {
    $h1->parentNode->appendChild($dom->createElement('br'));
}