在PHP中更新特定的XML节点

时间:2015-01-09 08:11:20

标签: php xml domdocument sitemap

我有一个管理员可以上传图片的文件夹。每组图像都与特定URL相关,并跟踪到站点地图结构中:

基本XML站点地图

 <url>
   <loc>URL1</loc>
   <image:image>
     <image:loc>Image1 URL</image:loc>
     <image:caption>Image1 Caption</image:caption>
   </image:image>
   <image:image>
     <image:loc>Image2 URL</image:loc>
     <image:caption>Image2 Caption</image:caption>
   </image:image>
 </url> 

 <url>
    <loc>URL2</loc>
   <image:image>
     <image:loc>Image3 URL</image:loc>
     <image:caption>Image3 Caption</image:caption>
   </image:image>
 </url>

我的目标是在管理员上传或删除与其相关的图片时更新特定的网址数据。例如,如果管理员上传新的Image4并从Image1删除URL1,则更新后的站点地图将为:

更新了XML站点地图

 <url>
   <loc>URL1</loc>
   <image:image>
     <image:loc>Image2 URL</image:loc>
     <image:caption>Image2 Caption</image:caption>
   </image:image>
   <image:image>
     <image:loc>Image4 URL</image:loc>
     <image:caption>Image4 Caption</image:caption>
   </image:image>
 </url> 

 <url>
    <loc>URL2</loc>
   <image:image>
     <image:loc>Image3 URL</image:loc>
     <image:caption>Image3 Caption</image:caption>
   </image:image>
 </url>

我正在寻找一种有效的方式来执行更新。我找到this post,但是(如果我说得对)更新URL数据,我需要遍历所有URL节点,找到特定节点(即使用正则表达式),然后更新其中的数据(即删除所有图像并插入新图像)。

PHP

$dom = new DOMDocument('1.0');
$dom->load('images.xml');

$urls = $dom->getElementsByTagName('url');

foreach($urls as $url)
{
    $locs = $url->getElementsByTagName('loc');
    $loc = $locs->item(0)->nodeValue;

    // check $loc with regular expression and make updates to specific node
}

老实说,我认为这不是一个有效的解决方案。有没有快速的方法来查找特定的URL节点并更新其中的图像数据?

0 个答案:

没有答案