2012-02-11 69 views
0

可能这个问题在很多问题中已经以某种方式或另一种方式回答了,但由于我是XML中的新人,我无法在我的项目中找到它。xml DOM:删除带有条件的元素

我有一个RSS(XML)这个结构文件:

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

我如何在PHP中,删除一些项目时标题等于某个值?谢谢。

编辑1:我的XML文件存储在我的Web服务器上。

回答

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 2012-02-12 10:14:02

+0

@hafedh:你必须使用'$ doc-> load(“new2.xml”)'。 – Saxoier 2012-02-12 14:03:21

+0

@Saxoier:THanks很多,它的工作原理,但由于它不保存在文件中,新的'数据'显示在我的PHP页面上,但XML文件仍然包含所有项目? – hafedh 2012-02-12 14:15:46