2010-08-10 7 views
0

à partir de ce fichier xml Je souhaite supprimer le noeud image en fonction de l'attribut ID. J'ai écrit du code php mais cela ne fonctionne pas.Supprimer le noeud de XML selon l'attribut

<gallery> 
     <organizate> 
     <organization w="3" h="1" space="17"/> 
     <organization w="4" h="2" space="17"/> 
     <organization w="6" h="3" space="7"/> 
     </organizate> 
     <pictures> 
     <picture target="events/preview/10picture1.jpg" title="test1" movie="" text="test1" link="events_calender.php" id="38"/> 
     <picture target="events/preview/8picture7.jpg" title="test2" movie="" text="cxvxc" link="events_calender.php" id="39"/> 
     <picture target="events/preview/5picture10.jpg" title="test3" movie="" text="test3" link="events_calender.php" id="40"/> 
     </pictures> 
    </gallery> 

code PHP

$doc = new DOMDocument(); 
$doc->formatOutput = TRUE; 
$doc->preserveWhiteSpace = FALSE; 
$xPath = new DOMXPath($doc); 
$doc->load('../Event_gallery.xml'); 
$query = sprintf('//pictures[./picture[@id="%s"]]', 38); 
foreach ($xPath->query($query) as $node) { 
    $node->parentNode->removeChild($node); 
} 
$doc->save('../Event_gallery.xml'); 

Je pense que XPath ne fonctionne pas correctement. le contrôle ne va pas dans le foreach

Répondre

0

Le problème est que vous chargez le document après vous passez le document à DOMXPath.

changement

$xPath = new DOMXPath($doc); 
$doc->load('../Event_gallery.xml'); 

à

$doc->load('../Event_gallery.xml'); 
$xPath = new DOMXPath($doc); 

Ensuite, il devrait fonctionner.

Pour enlever tout l'élément d'image avec l'identifiant donné au lieu du parent tout, changer le XPath pour

//pictures/picture[@id="38"] 
+0

une chose que je veux supprimer l'image de noeud seulement pas des images. Cette fois-ci, effacez les images. Peux-tu aider? – rajanikant

+0

@rajanikant voir la mise à jour – Gordon

Questions connexes