永发信息网

php删除xml某个节点

答案:2  悬赏:30  手机版
解决时间 2021-02-06 20:54
这是我的xml
<?xml version="1.0" encoding="utf-8"?>
<TimePlan>
<BaseInfo TimePlanName="1234" BackupType="0"/>
<MainInfo PlanType="5">
<Day DayCount="1"/>
<Week Str=""/>
<Month Str=""/>
<Custom>
<Time Id="ce93197ad802b6bca1bbb3106ce5d35f" Time="2014-05-16 09:01:09"/>

<Time Id="19fb7ebcfcf078a5adb3c5fdafaf5d1d" Time="2014-05-16 09:21:00"/>
<Time Id="eb152567c8b7f140d89bc59c0e17e5f4" Time="2014-05-16 09:21:54"/>
</Custom>
</MainInfo>
</TimePlan>
我想删除Custom里面的Time id=ce93197ad802b6bca1bbb3106ce5d35f
效果为
<Custom>
<Time Id="19fb7ebcfcf078a5adb3c5fdafaf5d1d" Time="2014-05-16 09:21:00"/>
<Time Id="eb152567c8b7f140d89bc59c0e17e5f4" Time="2014-05-16 09:21:54"/>
</Custom>
请大神帮忙
最佳答案
$xml = <<<'endxml'
<?xml version="1.0" encoding="utf-8"?>
<TimePlan>
<BaseInfo TimePlanName="1234" BackupType="0"/>
<MainInfo PlanType="5">
<Day DayCount="1"/>
<Week Str=""/>
<Month Str=""/>
<Custom>
<Time Id="ce93197ad802b6bca1bbb3106ce5d35f" Time="2014-05-16 09:01:09"/>
<Time Id="ce93197ad802b6bca1bbb3106ce5d35f" Time="2014-05-16 09:01:09"/>
<Time Id="ce93197ad802b6bca1bbb3106ce5d35f" Time="2014-05-16 09:01:09"/>
<Time Id="ce93197ad802b6bca1bbb3106ce5d35f" Time="2014-05-16 09:01:09"/>

<Time Id="19fb7ebcfcf078a5adb3c5fdafaf5d1d" Time="2014-05-16 09:21:00"/>
<Time Id="eb152567c8b7f140d89bc59c0e17e5f4" Time="2014-05-16 09:21:54"/>
</Custom>
</MainInfo>
</TimePlan>
endxml;

$id = 'ce93197ad802b6bca1bbb3106ce5d35f';

// 正则表达式方式替换
function remove_node_str($xml , $id){

return preg_replace('/\<\S+\s+Id=(\'|")'.$id.'\1[^\/\>]*?\s*\/\>/im' , '' , $xml);

}

//dom方式替换
function remove_node_dom($xml , $id , $tag='Time'){

$dom = new DomDocument();
$dom->loadXML($xml);
$nodes = $dom->getElementsByTagName($tag);
$dels = array();
for($i = 0 , $len = $nodes->length ; $i < $len ; $i++){
if ($nodes->item($i)->getAttribute('Id') == $id ){
$dels[] = $nodes->item($i) ;
}
}

foreach($dels as $node ){
$node->parentNode->removeChild($node);
}

return $dom->saveXML();
}
echo remove_node_str($xml , $id);
echo remove_node_dom($xml , $id );
全部回答
直接unset($sxe)不行,那样子只是把$sxe释放了,但是不知为什么,对于叶子元素或者属性可以直接unset,如unset($sxe->$child);而子树却不行,不知道为什么simplexml没有提供一个通用的remove方法,我上次是转换成dom来做的[[i] 本帖最后由 呼噜猪 于 2007-8-8 10:22 编辑 [/i]]
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
绿野仙踪地址有知道的么?有点事想过去
《淘宝规则》的违规积分何时清零?()
怎样制作西红柿酱
中国移动手机连锁卖场中华中路店在什么地方啊
在街道上从早到晚大声放音乐是否违法
中国人寿保险的老大抢单怎么办
五指山漂流好玩还是万泉河漂流好玩
一项研究表明,吃芹菜有助于抑制好斗情绪。15
邯郸市仁泰医药有限公司地址在哪,我要去那里
胸口堵得慌怎么回事,如果捶几下再捶背又好很
重生商女妙手空间猎军少
【地下室防水做法】采用最多的一种地下室防水
我的蜂蜜是在养蜂人手里买的纯蜂蜜,可能是时
求灵魂摆渡TXT小说,百度云,谢谢啦。
各类国内邮件在邮局保存多长时间?
推荐资讯
以前的老同学欠钱不还怎么办啊??
中国电信天翼贸易街营业厅这个地址在什么地方
没学过美术不好做广告设计吗
成都坐kl502到兰州要多长时间
精益科技地址好找么,我有些事要过去
成语故事:口是心非
萱美甲沙龙地址在什么地方,想过去办事
我农业银行每月20号房贷,这个月怎么没扣
最早是谁发明了纸张
【3220】RSA算法中的数学公式看不懂.想麻烦您
乌龟长什么样子?
如何正确理解“生活消费”的含义
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?