如何替换所有<item>节点?</item>

时间:2013-02-03 09:13:46

标签: php xml rss domdocument

我正在为学校创建一个在线商店的工作。有一个页面,管理员可以更新项目库存和/或放置待售物品。每次商品在销售或从销售中取消时,都会调用一个函数来更新带有最新销售商品的RSS Feed。

这是RSS XML结构:

<?xml version="1.0"?>
<rss version="2.0">
    <channel>
        <title>Project2 RSS Feed</title>
        <language>en-us</language>
        <link>http://people.rit.edu/~cns3946/539/project2/project2.rss</link>
        <description>Project 2 RSS Feed</description>
        <item>
            <title>Far Cry 3</title>
            <link>http://people.rit.edu/cns3946/539/project2/index.php?item_num=3</link>
            <description>
            <![CDATA[a boring description goes here....]]></description>
            <price>59.99</price>
            <salePrice>49.99</salePrice>
            <pubDate>Sun, 03 Feb 2013 01:20:04 -0500</pubDate>
        </item>
        <item>
            <title>Tales of the Abyss 3DS</title>
            <link>http://people.rit.edu/cns3946/539/project2/index.php?item_num=13</link>
            <description><![CDATA[a boring description goes here....]]></description>
            <price>39.99</price>
            <salePrice>29.99</salePrice>
            <pubDate>Sun, 03 Feb 2013 01:20:04 -0500</pubDate>
        </item>
        <item>
            <title>Resistance: Fall of Man</title>
            <link>http://people.rit.edu/cns3946/539/project2/index.php?item_num=17</link>
            <description><![CDATA[a boring description goes here....]]></description>
            <price>19.99</price>
            <salePrice>9.99</salePrice>
            <pubDate>Sun, 03 Feb 2013 01:20:04 -0500</pubDate>
        </item>
    </channel>
</rss>

每次调用该函数时,它都会附加到该文件中。我希望能够删除所有节点,然后将新的销售项目附加到文件中。我已经尝试过使用removeChild而无法理解它。如果您对如何使这项工作有任何提示或指示,您能告诉我吗?任何帮助,将不胜感激。

3 个答案:

答案 0 :(得分:0)

这样的事情应该有效:

$dom = new DOMDocument;
$dom->load('your_file_name.xml');
//loop thru each item node
foreach ($dom->getElementsByTagName('item') as $item) {
    //remove the item node
    $item->parentNode->removeChild($item);
}
echo $dom->saveXml();

答案 1 :(得分:0)

$items = $domdocument->getElementsByTagName("item");
while($items->length > 0)
    $items->item(0)->parentNode->removeChild($items->item(0));

答案 2 :(得分:0)

你可以像这样使用preg_replace,但它可以用于字符串

$str=preg_replace("~<item(.*?)>(.*?)</item>~si",""," ".$str." ");

删除字符串

中的所有项目