使用SimpleXML删除多个空节点

时间:2011-04-05 22:58:53

标签: php xml xpath simplexml

我想使用SimpleXML

删除XML文档中的所有空节点

这是我的代码:

$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 个答案:

答案 0 :(得分:2)

$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 :(得分:1)

我知道这篇文章有点旧,但在foreach中,$torm会在每次迭代中被替换。这意味着您的unset($torm)对原始$doc_xml对象无效。

相反,您需要删除元素本身:

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

使用 simplxmlelement-self-reference