Обновление определенного узла XML в переполнении стека

У меня есть папка, в которую администратор может загружать изображения. Каждая группа изображений связана с определенным 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 и обновить данные изображений внутри него?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]