[英]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.