@AleDv

Почему не удаляются элементы в XML документе?

Здравствуйте. Есть файл со следующей структурой
<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>http://mysite.local/?title='Заголвоок 3'</loc>
    <lastmode>2014-12-27</lastmode>
    <priopity>0.6</priopity>
  </url>
  <url>
    <loc>http://mysite.local/?title='Заголвоок 3'</loc>
    <lastmode>2014-12-27</lastmode>
    <priopity>0.6</priopity>
  </url>
  <url>
    <loc>http://mysite.local/?title='Заголвоок 3'</loc>
    <lastmode>2014-12-27</lastmode>
    <priopity>0.6</priopity>
  </url>
  <url>
    <loc>http://mysite.local/?title='Заголвоок 3'</loc>
    <lastmode>2014-12-27</lastmode>
    <priopity>0.6</priopity>
  </url>
  <url>
    <loc>http://mysite.local/?title='Заголовок 0'</loc>
    <lastmode>2014-12-27</lastmode>
    <priopity>0.6</priopity>
  </url>
</urlset>


Задача: удалить все элементы .
Решаю:
<?php

	$dom = new DOMDocument('1.0', 'utf-8');
	$dom->formatOutput = true;
	$dom->preserveWhiteSpace = false;
	$dom->load("sitemap.xml");
	
	$sitemap = $dom->documentElement;
		
	$items = $sitemap->getElementsByTagName('url');
	foreach($items as $item)
	{
		$sitemap->removeChild($item);
	}
	$dom->save("sitemap1.xml");
?>


В итоге из 5 элементов удаляется только 2. Скажите, где я ошибся и что нужно сделать, чтобы удалились все элементы ?

Заранее спасибо за помощь.
  • Вопрос задан
  • 2327 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Указатель итератора foreach ставится на элемент с индексом 0, затем этот элемент удаляется, соответственно нумерация сдвигается. Итератор переходит на элемент с индексом 1, пропуская элемент, получивший индекс 0.
Можно сделать так:
while($items->length) {
    $sitemap->removeChild($items->item(0));
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
OlegLazarenko
@OlegLazarenko
Используйте вот такой цикл
for($i = 0, $item = $items->item($i); $item; $item = $items->item($i)) {
    $sitemap->removeChild($item);
}
Удаляя элемент, вы меняете объект, а foreach об этом не знает
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы