我创建了一个解析xml文档的ios应用程序。如果用户登录,他们的信息将添加到xml文件中。我希望能够删除一个用户,如果他们正在注销或取消他们的登录。从本质上讲,我需要弄清楚如何删除如下所示的xml对象(在本例中是一个酒保):
<Bars>
<Bar>
<bar_id>0</bar_id>
<Bartenders>
<Bartender>
<imageURL>unique URL</imageURL>
<shift>20:30</shift>
</Bartender>
</Bartenders>
</Bar>
<Bar>
<bar_id>1</bar_id>
<Bartenders>
<Bartender>
<imageURL>aURL</imageURL>
<shift>a shift</shift>
</Bartender>
<Bartender>
<imageURL>aURL</imageURL>
<shift>a shift</shift>
</Bartender>
</Bartenders>
</Bar>例如,我想根据唯一的imageURL删除一个用户...我也会知道bar_id。这是我到目前为止所用的php,但我完全愿意接受关于以不同的方式完成它的建议。
$newimageURL = $row['imageURL'];
$newBar_ID = $row['Bar_ID'];
$xmlUrl = "Bars.xml"; // XML
$xmlStr = file_get_contents($xmlUrl);
$xml = new SimpleXMLElement($xmlStr);
$bartenders = $xml->xpath('//Bartenders');
// something needs to happen here to remove the child
$xml->asXML('Bars.xml');有人告诉我,我可以使用这样的东西:
$bartenders->removeChild($bartenders[$newBar_ID]);或者xpath,但我不确定如何使用唯一的imageXML正确地找到正确的调酒师。我知道我应该更好地计划/设计这件事,但我的时间很紧,这将不得不这样做。
抱歉,我的php太差了。谢谢你的帮助。
发布于 2012-04-12 09:58:07
在http://php.net/manual/fr/ref.simplexml.php上有一个非常好的脚本,它工作得非常好
function removeNode($xml, $path, $multi='one')
{
$result = $xml->xpath($path);
# for wrong $path
if (!isset($result[0])) return false;
switch ($multi) {
case 'all':
$errlevel = error_reporting(E_ALL & ~E_WARNING);
foreach ($result as $r) unset ($r[0]);
error_reporting($errlevel);
return true;
case 'child':
unset($result[0][0]);
return true;
case 'one':
if (count($result[0]->children())==0 && count($result)==1) {
unset($result[0][0]);
return true;
}
default:
return false;
}}
有关更多信息,请单击链接
https://stackoverflow.com/questions/10116405
复制相似问题