gpt4 book ai didi

php - 使用 unset() 删除 XML 中的节点; PHP/simplexml_load_file

转载 作者:数据小太阳 更新时间:2023-10-29 02:56:49 24 4
gpt4 key购买 nike

我正在尝试使用 unset() 通过 PHP 删除 XML 中的节点,但无法弄清楚这里发生了什么。它似乎无法正常工作,我在这里看到了很多其他类似性质的问题,但它们似乎并没有直接解决这个问题。这是我的 XML 的样子:

<?xml version="1.0" encoding="UTF-8"?>
<data>
<user>
<name>Test Name 1</name>
<email>test@test.com</email>
<spouse/>
</user>
<user>
<name>Test Name 2</name>
<email>anotherone@test.com</email>
<spouse>Test Name 3</spouse>
</user>
</data>

我正在使用的循环是这样的:

url = 'data/users.xml';
$xml = simplexml_load_file($url);

foreach($xml->user as $theUser){
if($theUser->email[0]=="test@test.com"){
echo "test";
unset($theUser);
}
}

当电子邮件匹配“test@test.com”时,我希望能够删除整个 user 节点。看来这应该可行,但我不明白为什么不行?任何帮助将不胜感激。谢谢!

最佳答案

SimpleXML很好,不需要切换到DOM , unset()工作正常,如果你做对了:

unset($theUser[0]);

看到它工作:https://eval.in/228773

但是你的foreach()会有问题 如果您在循环中删除节点。

我建议使用 xpath()而不是循环,IMO 很优雅,代码也更简单。

$users = $xml->xpath("/data/user[email='test@test.com']");

将创建一个包含所有 <user> 的数组使用该电子邮件地址。

unset($users[0][0]);

将删除该数组中的第一个用户。

foreach ($users as $user) unset($user[0]);

将删除整个数组。

查看实际效果:https://eval.in/228779

关于php - 使用 unset() 删除 XML 中的节点; PHP/simplexml_load_file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27212042/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com