Come rimuovere tag all'interno di un tag PHP XML MYSQL GCIDE lasciando il text

State cercando di capire un modo per trasformare il file gcide xml in un dump sql strutturato e, sebbene abbia avuto un po 'di successo, sembra che i risultati ottenuti siano limitati.

Devo conoscere un modo per rimuovere i tag all'interno di un altro tag all'interno di un file xml.

per esempio.

<entry><def>some def <altname>hey</altname></def></entry>

rimuovere "altname" ma mantenere il valore disponibile per il tag "def".

O usando php per rimuovere i nodes figli mantenendo il valore disponibile per genitore come string.

Ho provato a convertire il genitore in string, ma ho scoperto che i nodes figli erano stati rimossi. Anche usato mysql caricare il file xml ma ha avuto gli stessi problemi con la struttura.

i file GCIDE in uso

http://rali.iro.umontreal.ca/GCIDE/new-entries.zip

se sei in grado di convertire i file in sql dump, sarebbe molto apprezzato.

Questo tag della striscia di codice nel tag di destinazione ():

 $str = "<entry><def>some def <altname>hey</altname></def></entry>"; $dom = new domDocument(); $dom -> loadXML($str); // use getElementsByTagName or use DOMXPath($dom) to find your tag which don't contain other tags $tags = $dom -> getElementsByTagName("def"); $contents = ""; for($i = 0; $tags -> length > $i; $i++){ $contents = $tags -> item($i) -> nodeValue; //content without tags $children = $tags -> item($i) -> childNodes; remove_children($tags -> item($i)); //recursively remove chiled nodes $tags -> item($i) -> appendChild($dom -> createTextNode($contents)); } //recursively remove chiled nodes function remove_children(&$node) { while ($node->firstChild) { while ($node->firstChild->firstChild) { remove_children($node->firstChild); } $node->removeChild($node->firstChild); } } echo $dom -> saveXML();