Cómo eliminar un elemento específico del archivo xml

Quiero borrar:

<newWord>
    <Heb>צהוב</Heb>
    <Eng>yellow</Eng>
 </newWord>

desde:

<?xml version="1.0" encoding="UTF-8"?>
<xml>
  <newWord>
    <Heb>מילה ראשונה</Heb>
    <Eng>first word</Eng>
  </newWord>
  <newWord>
    <Heb>צהוב</Heb>
    <Eng>yellow</Eng>
  </newWord>
</xml>

por lo que la salida será:

<?xml version="1.0" encoding="UTF-8"?>
    <xml>
      <newWord>
        <Heb>מילה ראשונה</Heb>
        <Eng>first word</Eng>
      </newWord>
    </xml>

trato de encontrar la etiqueta <newWord> y despues de esto ir a hijo de ello <Eng>yellow</Eng> y si lo encontre por $searchString = 'yellow'; Debería tener que ir a padre y eliminar el elemento. <newWord>.

intento hacerlo con el siguiente codigo pero no se como ir al child del <newWord>. muchas gracias por ayudar.

este es mi código:

<?php 
$del=true;
        if ($del==TRUE){
                $searchString = 'yellow';
                header('Content-type: text/xml; charset=utf-8');
                $xml = simplexml_load_file('./Dictionary_user.xml');



                foreach($xml->children() as $child){
                  if($child->getName() == "newWord") {
                      if($searchString == $child['Eng']) {
                        $dom->parentNode->removeChild($xml);
                    } else {
                        echo('no match found resualt');
                    }
                  }
                }

                $dom = new DOMDocument; 
                $dom->preserveWhiteSpace = FALSE;
                $dom->formatOutput = true;
                $dom->load('Dictionary_user.xml');

                $dom->save("Dictionary_user.xml");
                $dom->saveXML();
                header('Location: http://127.0.0.1/www/www1/ajax/ajax4/workwell/popus1.html');
}
?>

preguntado el 28 de agosto de 12 a las 13:08

2 Respuestas

Prueba esto:

$searchString = 'yellow';
$xml = simplexml_load_file('./Dictionary_user.xml');

foreach($xml->children() as $child){    
  if($child->getName() == "newWord") {
    if($child->Eng == $searchString){
        $dom = dom_import_simplexml($child);
        $dom->parentNode->removeChild($dom);
    }
  }
}

echo $xml->asXML();

Respondido 28 ago 12, 13:08

En esta linea

if($searchString == $child['Eng']) {

Está tratando de comparar el cuerpo del nodo secundario, pero no se convierte en una cadena automáticamente. todavía es un SimpleXMLElement object, por lo que la comparación falla.

Intente convertirlo explícitamente en una cadena para obtener el cuerpo de la etiqueta.

if($searchString == (string)$child['Eng']) {

Respondido 28 ago 12, 17:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.