Question

Cela fait partie du XML que je veux modifier

<ScrapBook>
  <Event>
   <Name> Name of Event <Name>
   <Other Elements>
  </Event>
<ScrapBook>

Je dois modifier le nom de l'événement.

Je suis en mesure de supprimer le nœud à l'aide remove_child. Mais je ne sais pas comment ajouter un autre élément au même endroit.

Ceci est mon code:

   public function editEventName($oldEventName, $newEventName){
        $xmlDoc = new DOMDocument();
        $xmlDoc->load($this->xmlFileName);
        $events = $xmlDoc->getElementsByTagName("Event");
        foreach($events as $event){
            $eventNames = $event->getElementsByTagName("Name");
            $eventN = $eventNames->item(0)->nodeValue;
            if($oldEventName == $eventN){
                $nud = $eventNames->item(0)->parentNode;
                $nud->removeChild($eventNames->item(0));

                // set name to $newEventName
            }
            $xmlDoc->saveXML();
    $xmlDoc->save($this->xmlFileName);
        }
Était-ce utile?

La solution

Une solution, si je comprends bien la question, peut-être remplacer seulement la valeur de $eventNames->item(0)->nodeValue, sans essayer de supprimer le nœud et ajouter un nouveau.

Par exemple, en utilisant votre code, et la modification d'un peu de sorte qu'il fonctionne pour ce cas plus simple:

$str = <<<XML
<ScrapBook>
  <Event>
   <Name> Name of Event </Name>
   <Blah>glop glop</Blah>
  </Event>
</ScrapBook>
XML;

$xmlDoc = new DOMDocument();
$xmlDoc->loadXml($str);
$events = $xmlDoc->getElementsByTagName("Event");
foreach($events as $event){
    $eventNames = $event->getElementsByTagName("Name");
    $eventN = $eventNames->item(0)->nodeValue;
    if(' Name of Event ' == $eventN){
        $eventNames->item(0)->nodeValue = 'New name';
    }
}
var_dump($xmlDoc->saveXML());

me obtenir:

string '<?xml version="1.0"?>
<ScrapBook>
  <Event>
   <Name>New name</Name>
   <Blah>glop glop</Blah>
  </Event>
</ScrapBook>
' (length=119)

Et la valeur du Name du Event a été remplacé par « New name ».

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top