簡體   English   中英

xml刪除php中的子節點

[英]xml remove child node in php

我正在嘗試通過'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對象也意味着它成功了,但是沒有成功。

有任何想法嗎?

$element = $this->dom->getElementById($id);
$element->parentNode->removeChild($element);

有人殺了我 我沒有存錢。 對於浪費某人的寶貴時間,我深表歉意。

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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM