2011-06-22 11 views
3

PHPで最初のもの以外のすべてのli要素を削除するにはどうすればよいですか?PHPの最初の要素を除くすべてのリスト要素を削除しますか?

<div class="category"> 
    <ul class="products"> 
    <li>{nested child elements}</li> 
    <li>{nested child elements}</li> 
    <li>{nested child elements}</li> 
    </ul> 
</div> 

上記のコードは、別のスクリプトによって関数によって生成されます。

結果は次のようにする必要があります:

<div class="category"> 
    <ul class="products"> 
     <li>{nested child elements}</li> 
    </ul> 
</div> 

UPDATE:申し訳ありませんが、みんな "カテゴリ" はクラスではないIDです。

ヨッシーへの返済で、ul.productsには兄弟姉妹がいますが、私はそれらを投稿に含めませんでした。それがクエリに影響しますか?

これは私のコードはヨッシーのコードを追加してどのように見えるかです:

+0

PHPまたはJavaScript/jQuery? – NAVEED

+0

私はそれがPHPになることを望みます... – jilseego

+1

この出力をプログラムで生成しますか? – phant0m

答えて

9

てみてください...

class Myclass { 
    function prin_html() { 
     $content = get_code(); 
     $dom = new DOMDocument; 
     $dom->loadXml($content); 

     $xpath = new DOMXPath($dom); 
     foreach ($xpath->query('//li[position()>1]') as $liNode) { 
      $liNode->parentNode->removeChild($liNode); 
     } 

     echo $dom->saveXml($dom->documentElement);  
    } 
} 

それは印刷物に非フィルタリングhtmlコードを土台:

$dom = new DOMDocument; 
$dom->loadHtml('<div id="category"> 
    <ul class="products"> 
    <li>{nested child elements}</li> 
    <li>{nested child elements}</li> 
    <li>{nested child elements}</li> 
    </ul> 
</div>'); 

$xpath = new DOMXPath($dom); 
foreach ($xpath->query('//li[position()>1]') as $liNode) { 
    $liNode->parentNode->removeChild($liNode); 
} 

$output = ''; 
foreach ($xpath->query('//body/*') as $child) { 
    $output .= $dom->saveXml($child); 
} 

出力:

<div id="category"> 
    <ul class="products"> 
    <li>{nested child elements}</li> 


    </ul> 
</div> 
+0

試してみましたが、うまくいきませんでした... – jilseego

+0

@jilseegoこれは私が与えた例で動作します。それがあなたのために働かないならば、あなたはおそらく、まずは不正な形式のHTMLを持っているでしょう。あなたのデータのより詳細な情報や例を提供してください。 – Yoshi

+0

@Yhoshi:ulは兄弟を持っていますが、これはクエリに影響しますか? – jilseego

2

DOMDocumentを使用できます。

$dom = new DOMDocument; 

$dom->loadHTML($html); 

$ul = $dom->getElementById('category')->getElementsByTagName('ul')->item(0); 

foreach($ul->getElementsByTagName('li') as $index => $li) { 
    if ($index == 0) { 
     continue; 
    } 
    $ul->removeChild($li); 
} 
関連する問題