2 votes

suppression d'un fichier xml avec xml dom

Comment supprimer le bloc xml (voiture) où la couleur est bleue ?

<?xml version="1.0"?>
<cars>
    <car>
        <color>blue</color>
        <name>jonas</name>
    </car>
    <car>
        <color>green</color>
        <name>123</name>
    </car>
    <car>
        <color>red</color>
        <name>1234</name>
    </car>
</cars>

3voto

lonesomeday Points 95456

En supposant que votre XML est contenu dans une variable $xml vous pourriez utiliser quelque chose comme le code suivant :

$dom = new DOMDocument; // use PHP's DOMDocument class for parsing XML

$dom->loadXML($xml); // load the XML

$cars = $dom->getElementsByTagName('cars')->item(0); // store the <cars/> element

$colors = $dom->getElementsByTagName('color'); // get all the <color/> elements

foreach ($colors as $item) // loop through the color elements
    if ($item->nodeValue == 'blue') { // if the element's text value is "blue"
        $cars->removeChild($item->parentNode); // remove the <color/> element's parent element, i.e. the <car/> element, from the <cars/> element
    }
}

echo $dom->saveXML(); // echo the processed XML

1voto

Maerlyn Points 18190

Si vous disposez d'un long fichier xml, le fait de passer en boucle par tous les <car> Les articles peuvent prendre un certain temps. Comme alternative au post de @lonesomeday, ceci cible les éléments nécessaires avec XPath :

$domd = new DOMDocument();
libxml_use_internal_errors(true);
$domd->loadXML($xml);
libxml_use_internal_errors(false);

$domx = new DOMXPath($domd);
$items = $domx->query("//car[child::color='blue']");

$cars = $domd->getElementsByTagName("cars")->item(0);
foreach($items as $item) {
  $cars->removeChild($item);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X