У меня есть то, что должно быть легкой задачей: удалите узлы <places>
и их потомки из документа XML, оставив другие узлы.
Я пробовал этот код, но он не работал …
$document->preserveWhiteSpace = false; $books = $xpath->query('piletilve_info/places'); //echo "4"; foreach ($books as $places) { while($places->hasChildNodes()) { $places->removeChild($places->childNodes->item(0)); } $places->parentNode->removeChild($places); }
:$document->preserveWhiteSpace = false; $books = $xpath->query('piletilve_info/places'); //echo "4"; foreach ($books as $places) { while($places->hasChildNodes()) { $places->removeChild($places->childNodes->item(0)); } $places->parentNode->removeChild($places); }
:$document->preserveWhiteSpace = false; $books = $xpath->query('piletilve_info/places'); //echo "4"; foreach ($books as $places) { while($places->hasChildNodes()) { $places->removeChild($places->childNodes->item(0)); } $places->parentNode->removeChild($places); }
:$document->preserveWhiteSpace = false; $books = $xpath->query('piletilve_info/places'); //echo "4"; foreach ($books as $places) { while($places->hasChildNodes()) { $places->removeChild($places->childNodes->item(0)); } $places->parentNode->removeChild($places); }
Исходный XML для обработки:
<piletilve_info> <places> <place> ... </place> </places> <other node> ... </other node> </piletilve_info>
В реальных данных больше узлов, которые не являются местами, но для простоты в этом примере показано лишь несколько.
Я видел примеры C #, но мне не удается переносить код на PHP.
Уточнение : в фрагменте кода переменная $books
является только держателем для запрошенного списка. Имя не имеет значения.
Цель состоит в том, чтобы удалить весь узел, оставив другие узлы (в действительности их больше, но для простоты этот пример показывает все
$dom = new DOMDocument; $dom->load('places.xml'); foreach ($dom->getElementsByTagName('places') as $places) { $places->parentNode->removeChild($places); } echo $dom->saveXml();
:$dom = new DOMDocument; $dom->load('places.xml'); foreach ($dom->getElementsByTagName('places') as $places) { $places->parentNode->removeChild($places); } echo $dom->saveXml();
удалит все элементы <places>
любом месте документа, включая любых детей.
Вывод:
<?xml version="1.0"?> <piletilve_info> <other> ... </other> </piletilve_info>