在php中使用foreach从xml文件中删除元素
嗨,我有这样一个代码:在php中使用foreach从xml文件中删除元素,php,xml,Php,Xml,嗨,我有这样一个代码: $doc = new DOMDocument(); $doc->Load('courses.xml'); foreach ($doc->getElementsByTagName('courses') as $tagcourses) { foreach ( $tagcourses ->getElementsByTagName('course') as $tagcourse) { if(($tagc
$doc = new DOMDocument();
$doc->Load('courses.xml');
foreach ($doc->getElementsByTagName('courses') as $tagcourses)
{
foreach ( $tagcourses ->getElementsByTagName('course') as $tagcourse)
{
if(($tagcourse->getAttribute('instructorId')) == $iid){
$tagcourses->removeChild($tagcourse);
}
}
}
$doc->Save('courses.xml');
我有一个xml文件:
<courses>
<course courseId="1" instructorId="1">
<course_code>456</course_code>
<course_name>bil</course_name>
</course>
<course courseId="2" instructorId="2">
<course_code>234</course_code>
<course_name>math</course_name>
</course>
<course courseId="3" instructorId="2">
<course_code>341</course_code>
<course_name>cs</course_name>
</course>
<course courseId="4" instructorId="2">
<course_code>244</course_code>
<course_name>phyc</course_name>
</course>
</courses>
456
比尔
234
数学
341
反恐精英
244
物理
在这段代码中,我试图删除具有iid指定的讲师id的元素。问题是所有具有此讲师id的课程都必须删除。但在我的程序中,只有第一个具有此iid的课程被删除。您能提出解决方案吗?谢谢。getElementsByTagName()正在返回一个活动节点列表。如果在循环中从中移除一个元素,那么循环将在不同的元素集上迭代,结果是不可预测的。相反,将要删除的节点存储在数组中,然后迭代并删除它们
$doc = new DOMDocument();
$doc->Load('courses.xml');
$to_remove = array();
foreach ($doc->getElementsByTagName('courses') as $tagcourses)
{
foreach ( $tagcourses ->getElementsByTagName('course') as $tagcourse)
{
if(($tagcourse->getAttribute('instructorId')) == $iid){
$to_remove[] = $tagcourse;
}
}
}
// Remove the nodes stored in your array
// by removing it from its parent
foreach ($to_remove as $node)
{
$node->parentNode->removeChild($node);
}
$doc->Save('courses.xml');
getElementsByTagName()
正在返回一个活动节点列表。如果在循环中从中移除一个元素,那么循环将在不同的元素集上迭代,结果是不可预测的。相反,将要删除的节点存储在数组中,然后迭代并删除它们
$doc = new DOMDocument();
$doc->Load('courses.xml');
$to_remove = array();
foreach ($doc->getElementsByTagName('courses') as $tagcourses)
{
foreach ( $tagcourses ->getElementsByTagName('course') as $tagcourse)
{
if(($tagcourse->getAttribute('instructorId')) == $iid){
$to_remove[] = $tagcourse;
}
}
}
// Remove the nodes stored in your array
// by removing it from its parent
foreach ($to_remove as $node)
{
$node->parentNode->removeChild($node);
}
$doc->Save('courses.xml');
谢谢你的回答谢谢你的回答