【问题标题】:remove child from xml by ID / random通过 ID / 随机从 xml 中删除子项
【发布时间】:2013-11-18 21:49:21
【问题描述】:

我有一个这样的 XML 文件:

<T_Person>
<Person>
 <ID_Person>5B32EB71-E527-482B-B01B-07502D968E70</ID_Person>
 <First_Name_Person>u</First_Name_Person>
</Person>
<Person>
 <ID_Person>C47E80CF-6BDB-49CE-BCF4-20E7E08835BF</ID_Person>
 <First_Name_Person>l</First_Name_Person>
 </Person>
<Person>
 <ID_Person>84E8912E-B8F8-4A94-89D6-21B996C69363</ID_Person>
 <First_Name_Person>n</First_Name_Person>
</Person>
<Person>
 <ID_Person>3DFBDC33-F03E-4579-9D93-256A0FE1BCDA</ID_Person>
 <First_Name_Person>h</First_Name_Person>
</Person>
</T_Person>

如果我想通过选定的ID_person 删除一个元素,我应该怎么做?

$person = $data->getElementsByTagName('Person')->item(0);
$delete = $data->removeChild($person);

如果我运行它,它将删除顶部元素。如果我想删除一个随机元素怎么办?

【问题讨论】:

    标签: php xml dom


    【解决方案1】:

    通过 ID 移除元素:

    $id = '84E8912E-B8F8-4A94-89D6-21B996C69363';
    $people = $data->getElementsByTagName('Person');
    $toRemove = null;
    
    foreach ($people as $person) {
        $personId = $person->getElementsByTagName('ID_Person')->item(0)->nodeValue;
    
        // have to be careful with removeChild in a foreach loop
        if ($personId === $id) {
            $toRemove = $person;
        }
    }
    
    if ($toRemove) {    
        $delete = $data->removeChild($toRemove);
    }
    

    这是example script

    要删除随机元素,请使用rand

    $people = $data->getElementsByTagName('Person');
    $person = $people->item(rand(1, $people->length) - 1);
    $delete = $data->removeChild($person);
    

    参考:rand() documentationDOMNodeListexample

    【讨论】:

    • 怎么不工作了? rand(1, $people-&gt;length) 给了什么?你看过这个例子吗?
    • 它仍然从我的列表中删除了顶部
    • 该示例没有这样做。您是否尝试过多次运行它?当然,它会在一些的时候删除第一个。 ideone.com/uSRP4k
    猜你喜欢
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    • 2012-12-06
    • 1970-01-01
    • 2015-04-14
    • 2016-12-12
    • 2011-06-16
    相关资源
    最近更新 更多