Удалите несколько пустых узлов с помощью SimpleXML

Я хочу удалить все пустые узлы в моем XML-документе, используя SimpleXML

Вот мой код:

$xs = file_get_contents('liens.xml')or die("Fichier XML non chargé");
$doc_xml = new SimpleXMLElement($xs);
foreach($doc_xml->xpath('//*[not(text())]') as $torm)
    unset($torm);   
$doc_xml->asXML("liens.xml");

Я видел с print_r(), что XPath что-то захватывает, но из моего XML-файла ничего не удаляется.


person Servernumber    schedule 05.04.2011    source источник
comment
Я не верю, что вы действительно используете unset () для элемента в $ doc_xml. Позвольте мне поискать SimpleXML, чтобы узнать, как правильно удалить узел.   -  person 0x1F602    schedule 06.04.2011
comment
возможный дубликат PHP SimpleXML - удалить узел xpath   -  person    schedule 06.04.2011


Ответы (2)


Я знаю, что этот пост немного устарел, но в вашем foreach $torm заменяется на каждой итерации. Это означает, что ваш unset($torm) ничего не делает с исходным $doc_xml объектом.

Вместо этого вам нужно будет удалить сам элемент:

foreach($doc_xml->xpath('//*[not(text())]') as $torm)
    unset($torm[0]);
               ###

с помощью simplexmlelement-self-reference.

person Beshoy Girgis    schedule 28.01.2012

person    schedule
comment
dom_import_simplexml() не является обязательным, вы можете удалить узел элемента напрямую с помощью unset в simplexml, не переключаясь на DOM (Самостоятельная ссылка на simplexml). - person hakre; 22.06.2013