У меня есть папка, в которую администратор может загружать изображения. Каждая группа изображений связана с определенным 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>
Моя цель — обновить данные определенного 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>
Я ищу эффективный способ выполнения обновлений. я обнаружил эта почта, но (если я правильно понял), чтобы обновить данные 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 и обновить данные изображений внутри него?
Задача ещё не решена.
Других решений пока нет …