[英]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.