2010-06-24 7 views
1

J'ai un XML comme ci-dessouscomment supprimer nœud parent du XML en vérifiant la valeur de celui-ci en PHP DOM

<Row><Cell ss:StyleID="s245"><Data ss:Type="String">ABSOLUTE</Data></Cell> 
<Cell ><Data ss:Type="String">Yellow</Data></Cell> 
<Cell ><Data ss:Type="String">Exist</Data></Cell> 
<Cell ><Data ss:Type="Number">30</Data></Cell> 
<Cell ss:StyleID="s258"/> 
</Row> 
<Row><Cell ss:StyleID="s229"><Data ss:Type="String">PART3</Data></Cell> 
<Cell ><Data ss:Type="String">Part3 Description</Data></Cell> 
<Cell ><Data ss:Type="String">Buy_Part</Data></Cell> 
<Cell ><Data ss:Type="Number">0</Data></Cell> 
<Cell ss:StyleID="s258"/> 
</Row> 
<Row ss:AutoFitHeight="0" ss:Height="13.5"><Cell ss:StyleID="s245"><Data ss:Type="String">PART3</Data></Cell> 
<Cell ><Data ss:Type="String">Part3 Description</Data></Cell> 
<Cell ><Data ss:Type="String">Buy_Part</Data></Cell> 
<Cell ><Data ss:Type="Number">0</Data></Cell> 
<Cell ss:StyleID="s258"/> 
</Row> 

Je veux supprimer les nœuds du XML recherche de la valeur à l'intérieur du nœud. Exemple Je veux rechercher la valeur "PART3" dans l'exemple ci-dessus et je veux supprimer COmplete Node contenant cette valeur. Ainsi, la sortie ne devrait être que comme ci-dessous

<Row><Cell ss:StyleID="s245"><Data ss:Type="String">ABSOLUTE</Data></Cell> 
<Cell ><Data ss:Type="String">Yellow</Data></Cell> 
<Cell ><Data ss:Type="String">Exist</Data></Cell> 
<Cell ><Data ss:Type="Number">30</Data></Cell> 
<Cell ss:StyleID="s258"/> 
</Row> 

J'ai écrit ci-dessous le script

$doc = new DOMDOcument; 
    $doc->loadxml($xmldata); 
    $item_id = "PART3"; 
    $xpath = new DOMXpath($doc); 
    foreach($xpath->query('//Row[Cell/Data="' . $item_id . '"]') as $node) { 
    $node->parentNode->removeChild($node); 
} 
echo $doc->savexml(); 

Mais il affiche le code XML complet sans supprimer. S'il vous plaît Aidez-moi comment supprimer le nœud en recherchant la valeur PART3 depuis le XML sera très grand et il contient beaucoup de <ROW><CELL><DATA></Data></Cell><ROW>

+0

Le code que vous donnez fonctionne pour moi. Quand je l'exécute, je reçois le XML sans les nœuds '' ayant un enfant '' avec la valeur textuelle * PART3 * - en d'autres termes, le XML contient seulement le' 'Noeud contenant * ABSOLUTE * – Gordon

+0

Pouvez-vous s'il vous plaît coller le code complet que vous avez couru .. Je cours ceci dans UNIX –

+0

J'ai couru votre code et votre XML (assigné à une variable avec HEREDOC d'ailleurs). Cela donne beaucoup d'avertissements sur le fait que le préfixe d'espace de nommage n'est pas défini, mais à part cela, il fait ce que vous demandiez. – Gordon

Répondre

0

Votre XPATH semble correct ... juste curieux, mais vous mentionnez qu'il s'agit d'un échantillon extrait de XML. Est-ce que le casing sur les balises XML dans le XML réel est peut-être légèrement différent, provoquant une mauvaise correspondance dans votre XPATH?

+0

Salut RObert .. Mais pendant que je teste avec ces extraits aussi je ne reçois pas la sortie ici Il est complètement supprimé –

Questions connexes