Удалить несколько пустых узлов с помощью SimpleXML - PullRequest
0 голосов
/ 06 апреля 2011

Я хочу удалить все пустые узлы в моем 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-файла ничего не удаляется.

Ответы [ 2 ]

2 голосов
/ 03 октября 2012
$file  = 'liens.xml';
$xpath = '//*[not(text())]';

if (!$xml = simplexml_load_file($file)) {
    throw new Exception("Fichier XML non chargé");
}

foreach ($xml->xpath($xpath) as $remove) {
    unset($remove[0]);
}

$xml->asXML($file);
1 голос
/ 29 января 2012

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

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

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

с помощью simplexmlelementсамореференция .

...