2011-12-30 37 views
0

我正在使用解析器將某些span元素更改爲相應的標題元素。我有以下代碼:帶外部元件,即。使用php解析器刪除父親

$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',但是我無法讓它工作。有任何想法嗎?

在此先感謝。

+0

不應該 $翼展> parentNode-> parentNode->的replaceChild($ H1, $翼展> parentNode); 做你想做的事? – Pelshoff 2011-12-30 21:59:06

+0

啊,謝謝Pelshoff!咄!我正在尋找某種'removeParent'命令。我想再問一個問題,因爲現在出現了一個新問題。如果我想在每個標題後插入'
,我該怎麼做......?謝謝 – Inigo 2011-12-30 22:20:12

回答

0

不應該$翼展> parentNode-> parentNode->的replaceChild($ H1,$翼展> parentNode);做你想做的事?

爲了添加一個節點給定的節點後,您可以使用類似(未經測試!):

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

Spot on,Pelshoff,感謝您的幫助。 – Inigo 2011-12-30 23:43:43

+0

您不需要爲'insertBefore'檢查'nextSibling' - 如果它是'NULL',則'insertBefore'追加。如果沒有,它會在之前插入。沒有,如果需要。 – hakre 2013-06-23 22:29:20