2013-06-29 4 views
0

En termes simples, supposons que vous avez la structure XML suivante:Comment obtenir le contenu de deux balises xml même quand ils ont encore des balises XML dans les (PHP-XML)

<TEXT>Well, I need some help as you <CUSTOMTAG>can</CUSTOMTAG> see.</TEXT> 

Lors de l'extraction du texte de ce noeud en PHP avec strip_tags(), je ne reçois pas le contenu des tags.

Première étape:

Ce que je veux faire, est d'extraire et ont donc la chaîne suivante:

« Eh bien, je besoin d'aide que vous pouvez voir. »

Deuxième étape:

Je souhaite également convertir le <CUSTOMTAG> et </CUSTOMTAG> à quelque chose d'autre, comme <e> et </e> par exemple, et enfin la chaîne suivante:

"Well, I need some help as you <e>can</e> see." 

J'apprécierais seulement le code testé et fonctionnant.

Merci d'avance!

Cordialement

+2

** ** Harry, sur nous vous remercions d'essayer vous-même de codage et de montrer ce que tu as essayé. Ce n'est pas "commander un code". – michi

Répondre

0

Pour la deuxième partie, vous pouvez utiliser quelque chose comme ça: «J'apprécierais testés et le code de travail »

<?php 
$xml = "<TEXT>Well, I need some help as you <CUSTOMTAG>can</CUSTOMTAG> see, <CUSTOMTAG>maybe</CUSTOMTAG>.</TEXT>"; 

//1st part: 
$dom = new DOMDocument(); 
$dom->loadXML($xml); 
$xPath = new DOMXPath($dom); 
foreach ($xPath->query('//TEXT') as $textNode) { 
    echo $textNode->textContent; 
} 
// 2nd part: 
foreach ($xPath->query('//TEXT/CUSTOMTAG') as $find) { 
    $find_value = $find->nodeValue; 
    $replace = $dom->createDocumentFragment(); 
    $replace->appendXML('<e>'.$find_value.'</e>'); 
    $find->parentNode->insertBefore($replace, $find); 
    $parentnode = $find->parentNode; 
    $parentnode->removeChild($find); 
} 
$result = $dom->saveHTML(); 
echo $result; 
?> 
+0

Merci pour votre réponse! :-) – Harry

+0

De rien. Le code n'est probablement pas le plus net, mais cela fonctionne (également pour plusieurs instances de '') – Konservin

0

Pour la première étape il suffit d'utiliser le code suivant:

<?php 
$xml = "<TEXT>Well, I need some help as you <CUSTOMTAG>can</CUSTOMTAG> see.</TEXT>"; 

$domDoc = new DOMDocument(); 
$domDoc->loadXML($xml); 

$domXPath = new DOMXPath($domDoc); 
$textNodes = $domXPath->query('//TEXT'); 

foreach ($textNodes as $textNode) { 
    echo $textNode->textContent; 
} 

Pour la deuxième étape il suffit de regarder cette réponse https://stackoverflow.com/a/8164058/2000503.

+0

Merci pour votre réponse! :-) Est-il possible cependant d'obtenir le même résultat en utilisant SimpleXML? – Harry

+0

Pas que je sache, j'utilise PHP SimpleXML la plupart du temps je dois traiter avec XML, mais dans ce cas en particulier, je pense que DOMDocument est plus approprié. –

+0

Merci beaucoup mon pote! Vous avez tous deux été remarquablement utiles! À votre santé! – Harry

Questions connexes