xml DOM:删除带条件的元素

时间:2012-02-11 21:52:49

标签: php xml

可能问题已在许多问题中以某种方式或另一种方式得到解答,但由于我是XML的新手,我无法在我的项目中找到答案。

我有一个具有以下结构的RSS(XML)文件:

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

如果标题等于某个值,我怎么能在PHP中删除一些项?感谢。

EDIT1:我的XML文件存储在我的网络服务器上。

1 个答案:

答案 0 :(得分: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();