2012-04-17 106 views
1

我的XML看起来像这样:PHP XML删除元素

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<images> 
    <pic> 
     <image>54</image> 
     <descr>Image 1</descr> 
    </pic> 
    <pic> 
     <image>32</image> 
     <descr>Image 2</descr> 
    </pic> 
    <pic> 
     <image>47</image> 
     <descr>Image 3</descr> 
    </pic> 
</images> 

我想删除一个元件,例如第二照片(图像32)。使用此代码,但它不起作用。

$xml = simplexml_load_file('../../images.xml'); 

$target = false; 
$i = 0; 
foreach ($xml->pic as $m) { 
    if ($m['image']=='32') { $target = $i; break; } 
    $i++; 
} 
if ($target !== false) {  //$target always be $false 
    unset($xml->pic[$target]); 
} 

echo $xml->savexml(); 

感谢您的任何建议。

回答

1

观察

$m是反对不阵列,$m['image']应改为$m->image

变化$target = false;吨Ø$target = 0 ;

$xml = simplexml_load_file ('1.xml'); 
$target = 0; 
$i = 0; 
foreach ($xml->pic as $m) { 
    if ($m->image == '32') { 
     $target = $i; 
     break; 
    } 
    $i ++; 
} 

if ($target !== false) { 
    unset ($xml->pic [$target]); 
} 
echo $xml->savexml(); 
+1

这不起作用。他对目标的原始测试很好 - 这段代码会一直删除第二个“pic”。 – 2012-04-17 22:45:11

+0

+1谢谢@Sam Dufel ..只是注意到对$ i的依赖性改变了我的脚本 – Baba 2012-04-17 22:47:54

0

尝试创建一个新的XML对象,并只添加所需的数据并保存新对象。

0

您的测试是错误的

if ($target !== false) { 

应该

if ($target > 0) { 
+0

这是不正确 – 2012-04-17 22:43:00

+0

!==为相同的值,型式试验。 0永远不会!== false(布尔和int)。 – 2012-04-17 22:46:43

+1

重读他的代码。他将目标初始化为“false”,并在找到正确的索引时将其设置为整数值。如果'target === false',则从未找到正确的索引。否则,目标已被设置为他正在删除的元素的索引(并且0是有效索引)。 – 2012-04-17 22:49:34