2010-12-12 7 views
1

Comment l'élément <title> peut-il être supprimé dans cette chaîne XML?Comment supprimer un élément dans une chaîne XML?

$input= 
'<items>dfd jdh flkdjf 
<title>My Test Title 
</title>.... 
<store>my store 1</store> 
</items>.....'; 

$output= 
    '<items>dfd jdh flkdjf 
     .... 
    <store>my store 1</store> 
    </items>.....'; 

Merci

+2

[ "Avez-vous essayé d'utiliser à la place d'un analyseur XML?" dit le sage bobince] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) – BoltClock

+0

ok, comment tu le fais avec xmldocument ? Son pour le test unitaire pas pour la production soo regex peut être bon aussi – Yosef

+0

@BoltClock: Cela dépend du document XML. – Gumbo

Répondre

7

SimpleXML

$str = '<items>1<title>lalala</title><others>...</others></items>'; 
$xml = simplexml_load_string($str); 
unset($xml->children()->title); 
$output = str_replace("<?xml version=\"1.0\"?>\n", '', $xml->asXml()); 
+0

SimpleXML à la hauteur de son nom, +1 – BoltClock

+0

Merci, ne fonctionne pas dans le cas réel, car les éléments de titre dans un autre emplacement. Je donne seulement un exemple simple – Yosef

+0

est réparable, mais vous avez besoin de mettre à jour à nouveau votre question avec le xml réel ... pour plusieurs nœuds, vous devez boucle dans chaque nœud ... – ajreal

2

Si vous travaillez avec des données d'entrée inconnues, ou avec le code de production, vous devez utiliser un analyseur XML.

Si vous travaillez dans un environnement de test et les données d'entrée est connu:

$output = preg_replace('%<title>[^<]*</title>%', '', $input); 

Si vous devez autoriser des attributs sur l'étiquette, je suggère d'utiliser un analyseur réel XML, pour une fiabilité maximale et un minimum de chance d'erreur.

+0

merci, mais si le titre a des attributs? Yosef

+0

Mis à jour. S'il vous plaît noter la mise en garde. –

+0

oui, sa chute dans mon vrai code – Yosef

Questions connexes