Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP从XML中删除某些元素_Php_Xml - Fatal编程技术网

使用PHP从XML中删除某些元素

使用PHP从XML中删除某些元素,php,xml,Php,Xml,最初,我想将一个XML文件拆分为两个文件。因此,我必须删除一些元素 XML如下所示: 1. 新的 2. 新的 3. 古老的 4. 新的 5. 古老的 6. 古老的 7. 古老的 我需要的是: 1. 新的 2. 新的 4. 新的 因此,我必须删除所有带有typ=old的事件。我试过这样做: $events=文件获取内容(“events.xml”); $doc=新的simplexmlement($events); foreach($doc->event as$seg) { 如果($seg->

最初,我想将一个XML文件拆分为两个文件。因此,我必须删除一些元素

XML如下所示:


1.
新的
2.
新的
3.
古老的
4.
新的
5.
古老的
6.
古老的
7.
古老的
我需要的是:


1.
新的
2.
新的
4.
新的
因此,我必须删除所有带有
typ
=
old
的事件。我试过这样做:

$events=文件获取内容(“events.xml”);
$doc=新的simplexmlement($events);
foreach($doc->event as$seg)
{
如果($seg->typ=='new'){
回声“$seg->typ
”; 未设置($doc->event[$seg]); } } echo$doc->asXml();
但只有回声是正确的,其余的还是一样的。 然后我找到了这个函数:

函数delete\u event\u typ($typ,$filename='events.xml'){
$data=simplexml\u load\u文件($filename);
对于($i=0,$length=count($data->event);$i<$length;$i++){
如果($data->event[$i]->typ==$typ){
未设置($data->event[$i]);
}
}
文件内容($filename,$data->saveXML());
}
//样本使用
删除事件类型(“旧”);
但它并不是删除所有条目,它看起来像:


1.
新的
2.
新的
4.
新的
6.
古老的

那我还能做什么呢?有什么想法吗?

按相反的顺序循环

for($c = count($doc->event); $c >= 0 ; $c--)
{
  if ($doc->event[$c]->typ == 'old') {
    unset($doc->event[$c]);
  }
}