Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / dom, как удалить дочерний элемент по ид / 5 сообщений из 5, страница 1 из 1
21.05.2013, 13:36
    #38266241
ans2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dom, как удалить дочерний элемент по ид
Есть файл klass.xml

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?xml version="1.0" encoding="utf-8"?>
<childrens>
<child id="1" name="klassa">
<item id="1">Sasha</item>
<item id="2">kosta</item>
<item id="3">Petya</item>
</child>
<child id="2" name="klassb">
<item id="4">Vasya</item>
<item id="5">Kolya</item>
<item id="6">Alesha</item>
</child>
</childrens>

Изначально стояла задача удалить узел child по id. Справился, получился следующий код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?php 
$dom = new DOMDocument; 
$dom->load('klass.xml');
$doc = $dom->documentElement;
$list = $doc->getElementsByTagName('child');

foreach ($list as $element) {
         if ($element->getAttribute('id') == '2') {
             $doc->removeChild($element);
         }
}
$dom->save('test1.xml'); 
?>

Теперь стоит задача удалить item по id, например '<item id="3">Petya</item>' - целиком.
Подскажите, как переписать данный код, чтобы добиться результата.
Спасибо.
...
Рейтинг: 0 / 0
21.05.2013, 13:52
    #38266286
mhx
mhx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dom, как удалить дочерний элемент по ид
XPath вам поможет и избавит ваш код от цикла
Код: sql
1.
2.
//child[@id="2"]
//item[@id="3"]
...
Рейтинг: 0 / 0
21.05.2013, 14:21
    #38266352
ans2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dom, как удалить дочерний элемент по ид
mhx,

Уже смотрел эту тему, а как применить ? В интернете нашел всего 1 пример и то с циклом...
...
Рейтинг: 0 / 0
21.05.2013, 15:38
    #38266559
ans2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dom, как удалить дочерний элемент по ид
Как теперь удалить его?)
//$domRef->parentNode->removeChild($el); - не удаляет.
//$domRef->removeChild($el); - не удаляет.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<?php 
$dom = new DOMDocument; 
$dom->load('auto.xml');
$xpath = new DOMXPath($dom); 

$squery = $xpath->query('/childrens/child/item[@id="6"]'); 
$el = $squery->item(0);
print_r($el);
//$domRef->parentNode->removeChild($el);
$dom->save('test1.xml'); 
?>
...
Рейтинг: 0 / 0
21.05.2013, 15:44
    #38266574
ans2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dom, как удалить дочерний элемент по ид
ans2,

Все оказалось элементарно и просто )
Может кому пригодится:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<?php 
$dom = new DOMDocument; 
$dom->load('auto.xml');
$xpath = new DOMXPath($dom); 

$squery = $xpath->query('/childrens/child/item[@id="6"]'); 
$el = $squery->item(1);
$el->parentNode->removeChild($el);
$dom->save('test1.xml'); 
?>
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / dom, как удалить дочерний элемент по ид / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]