Mevcut cevapları Sanılanın aksine, her SimpleXML eleman düğümü sadece kendisi tarafından belgeden kaldırılır ve unset()
. Durumda nokta SimpleXML aslında nasıl çalıştığını anlamak gerekir sadece.
İlk kaldırmak istediğiniz öğesini bulun:
list($element) = $doc->xpath('/*/seg[@id="A12"]');
Sonra $element
Eğer unset temsil öğe kaldırmak onun self-reference:
unset($element[0]);
Herhangi bir öğenin ilk elemanı SimpleXML (self-başvuru) elemanının kendisi olduğu için bu çalışır. Bu sihirli doğa ile ilgisi yoktur, sayısal endeksler herhangi bir liste öğelerini (örneğin ebeveyn-> çocuklar) temsil edilir, ve hatta tek bir çocuk böyle bir liste.
Sigara sayısal dizge endeksleri (dizi-erişim) özelliklerini temsil veya çocuk-eleman (lar) (emlak-erişim).
Mülkiyet erişim nedenle sayısal indecies gibi:
unset($element->{0});
olarak iyi çalışır.
Doğal olarak bu xpath örnek ile, oldukça yalındır (PHP 5.4) 'dir:
unset($doc->xpath('/*/seg[@id="A12"]')[0][0]);
Tam bir örnek kod (Demo):
<?php
/**
* Remove a child with a specific attribute, in SimpleXML for PHP
* @link http://stackoverflow.com/a/16062633/367456
*/
$data=<<<DATA
<data>
<seg id="A1"/>
<seg id="A5"/>
<seg id="A12"/>
<seg id="A29"/>
<seg id="A30"/>
</data>
DATA;
$doc = new SimpleXMLElement($data);
unset($doc->xpath('seg[@id="A12"]')[0]->{0});
$doc->asXml('php://output');
Çıktı:
<?xml version="1.0"?>
<data>
<seg id="A1"/>
<seg id="A5"/>
<seg id="A29"/>
<seg id="A30"/>
</data>