2011-12-30 4 views
0

パーサーを使用して、特定のスパン要素を対応する見出し要素に変更しています。私は次のコードを持っています:ストリップ外側の要素、すなわち。親を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

べきではない $ span-> parentNode-> parentNode->のreplaceChild($さh1:

与えられたノードの後に​​ノードを追加するためには、(!テストされていない)のようなものを使用することができます$ span-> parentNode); あなたは何をしますか? – Pelshoff

+0

ああ、ありがとう、ペルソフ!ダー!私はいくつかの種類の 'removeParent'コマンドを探していました。私はもう1つの質問をしたいと思います。新しい問題が現れました。すべての見出しの後に '
'を挿入する場合は、どうすればよいですか?ありがとうございました – Inigo

答えて

0

$ span-> parentNode-> parentNode-> replaceChild($ h1、$ span-> parentNode)は必要ありません。あなたは何をしたいですか? 、

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

Spots on、Pelshoff、ありがとうございました。 – Inigo

+0

'insertBefore'の' nextSibling'をチェックする必要はありません - もし 'NULL'なら' insertBefore'が追加されます。そうでない場合は、前に挿入されます。必要な場合はいいえ。 – hakre

関連する問題