【问题标题】:xml remove child node in phpxml在php中删除子节点
【发布时间】:2014-02-25 20:38:10
【问题描述】:

我正在尝试通过“id”属性删除“druzenje”元素。我知道要做到这一点,我必须从该元素中删除所有子节点。

<?xml version="1.0" encoding="utf-8"?>
<druzenja>
    <druzenje id="1">
        <podaci attribute="some-data"/>
    </druzenje>
    <druzenje id="3">
        <podaci attribute="some-data"/>
    </druzenje>
</druzenja>

要删除的代码是这样的......

    $druzenja = $this->dom->getElementsByTagName('druzenje');

    foreach($druzenja as $node) {
        if($node->getAttribute('id') == $id) {
            $podaciNodeList = $node->getElementsByTagName('podaci');
            foreach($podaciNodeList AS $podaciNode) {
                $node->removeChild($podaciNode);
            }

            $this->dom->documentElement->removeChild($node);
            return true;
        }
    }

我认为通过 'id' 属性删除节点可能是糟糕的设计,但我在此基础上编写了很多代码,到目前为止,还没有任何问题。我还有一个代码可以删除以类似方式工作的“podaci”元素,它没有问题,但在这里它失败了。代码不会删除“podaci”和“druzenje”元素,即使 removeChild() 返回 DomElement 对象,这意味着它成功但不是。

有什么想法吗?

【问题讨论】:

    标签: php xml


    【解决方案1】:

    getElementsByTagName() 返回从 DOM 中删除元素的“实时”结果。将其复制到一个数组中,得到一个固定的列表。

    $druzenja = iterator_to_array(
      $this->dom->getElementsByTagName('druzenje')
    );
    
    foreach ($druzenja as $node) {
      if ($node->getAttribute('id') == $id) {
        $node->parentNode->removeChild($node);
      }
    }
    

    Xpath 将允许您使用更复杂的条件。结果不是实时的。

    $xpath = new DOMXpath($this->dom);
    foreach ($xpath->evaluate('//druzenje[@id="'.$id.'"]') as $node) {
      $node->parentNode->removeChild($node);
    }
    

    【讨论】:

      【解决方案2】:

      有人杀了我。我没有存钱。我很抱歉浪费了别人的宝贵时间。

      【讨论】:

        【解决方案3】:
        $element = $this->dom->getElementById($id);
        $element->parentNode->removeChild($element);
        

        【讨论】:

        • 'id' 属性不是 xsl:ID 属性,它只是一个称为 'id' 的属性,因此 $element 为 NULL。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-09
        • 1970-01-01
        • 1970-01-01
        • 2022-08-19
        • 1970-01-01
        • 1970-01-01
        • 2013-11-09
        相关资源
        最近更新 更多