繁体   English   中英

使用SimpleXmlElement删除xml节点

[英]deleting xml node using SimpleXmlElement

我正在尝试使用SimpleXmlElement删除XML节点。

但是运行此代码后,XML文件中没有任何更改。 它应该可以工作,但是未unset不会对文件进行任何更改:

$xml   = new SimpleXMLElement('goods.xml', NULL, TRUE);
$items = $xml->xpath('/items/item');
for ($i =0; $i < sizeof($items); $i++)
{
    if ($items[$i]->qty == 0 and $items[$i]->qtyonhold == 0)
    {
        $index = $i;
    }
}

$index = $index + 1;

var_dump($items[$index]);
unset($items[$index]);

$xml->asXML("goods.xml");

您正在将项xpath分配给$ items变量。 您从那里正确删除了索引,但是正在显示$ xml变量。 $ items就像$ xml对象的xpath的副本一样。 因此,实际上您需要从$ xml变量本身中删除该索引。

我刚刚在此平台上找到了一个很好的解释性解决方案: https : //stackoverflow.com/a/262556/2922852

采用

unset($items[$index][0]);

关于为什么hakre上以这种方式在SO上如此工作,很好的解释 ,请查找它。

除此之外,您可以简化代码并仅用3行即可完成所有操作:

$xml = simplexml_load_string($x); // assume XML in $x
$items = $xml->xpath("/items/item[qty='0' and qtyonhold='0']");
foreach ($items as $item) unset($item[0]);
  • xpath在其子<qtyonhold> <qty><qtyonhold>选择所有两个都为0 <item> -nodes
  • foreach数组$items并使用上面说明的unset -syntax。

看到它正常工作: http : //codepad.viper-7.com/Hae4vY

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM