2012-02-11 24 views
0

質問はすでに何かの形で、または他の多くの質問で回答されているかもしれませんが、私はXMLの新しいビーですので、私のプロジェクトでは理解できません。xml DOM:条件付きの要素を削除する

私はRSS(XML)は、この構造を持つファイルがあります。

<rss> 
    <channel> 
      <item> 
       <title>some title</title> 
       <description> some descrp </description> 
       ... 
      </item> 
    </channel> 
</rss> 

タイトルがいくつかの値に等しいときにどのように私は、PHPで、いくつかの項目を削除することができますか?ありがとう。

EDIT1:WebサーバーにXMLファイルが保存されています。

答えて

0
$rss = " 
<rss> 
    <channel> 
      <item> 
       <title>some title</title> 
       <description> some descrp </description> 
      </item> 
      <item> 
       <title>some other title</title> 
       <description> some descrp </description> 
      </item> 
    </channel> 
</rss> 
"; 
$doc = new DOMDocument(); 
$doc->loadXML($rss); 
$xpath = new DOMXPath($doc); 
$els = $xpath->query('//title[text()="some title"]'); 
foreach($els as $el) 
{ 
    $parent = $el->parentNode; 
    $parent->parentNode->removeChild($parent); 
} 
echo $doc->saveXML(); 

完全一致を検索します。

PS:あなたの助けのための別の方法で、XPathのなしは

$doc = new DOMDocument(); 
$doc->loadXML($rss); 
$els = $doc->getElementsByTagName('title'); 
for($i = $els->length-1; $i >= 0; $i--) 
{ 
    $el = $els->item($i); 
    if ($el->nodeValue == 'some title') 
    { 
     $parent = $el->parentNode; 
     $parent->parentNode->removeChild($parent); 
    } 
} 
echo $doc->saveXML(); 
+0

おかげで、私は私のXMLファイルをインポートしたい、それが私はそれはちょうどそれが構造だ示すことであった、書いた以上に大きいです。私は$ doc-> loadXML( "new2.xml")を試しました。それは動作していないようですか? – hafedh

+0

@hafedh: '$ doc-> load(" new2.xml ")'を使う必要があります。 – Saxoier

+0

@Saxoier:たくさんありますが、ファイルに保存されていないので、新しい 'data'がPHPページに表示されますが、XMLファイルにはまだすべてのアイテムがありますか? – hafedh

関連する問題