2009-11-25 3 views
1

J'essaie de parcourir certains fichiers html et d'insérer des balises personnalisées autour de chaque occurrence d'une balise "A". J'ai jusqu'à présent, mais la dernière étape de l'ajout de mes pseudo-tags aux balises de lien m'échappe, quelqu'un peut-il offrir des conseils?PHP - dom appendChild() - ajout de chaînes autour de balises html sélectionnées en utilisant PHP DOM

Tout fonctionne très bien jusqu'à la dernière ligne de code - qui est où je suis coincé. Comment placer ces pseudotags de chaque côté de la balise "A" sélectionnée?

$dom = new domDocument; 
$dom->loadHTML($section); 
$dom->preserveWhiteSpace = false; 
$ahrefs = $dom->getElementsByTagName('a'); 
foreach($ahrefs as $ahref) { 
    $valueID = $ahref->getAttribute('name'); 
    $pseudostart = $dom->createTextNode('%%' . $valueID . '%%'); 
    $pseudoend = $dom->createTextNode('%%/' . $valueID . '%%'); 
    $ahref->parentNode->insertBefore($pseudostart, $ahref); 
    $ahref->parentNode->appendChild($pseudoend); 
    $expression[] = $valueID; //^$link_name[0-9a-z_()]{0,3}$ 
    $dom->saveHTML(); 
} 
//$dom->saveHTML(); 

Je suis l'espoir d'obtenir cela effectuer les opérations suivantes:

<a href="xxx" name="yyy">text</a> 

transformé en

%%yyy%%<a href="xxx" name="yyy">text</a>%%/yyy%% 

Mais actuellement, il ne semble pas faire quoi que ce soit - les sorties de page, mais il n'y a pas de remplacements ou de nœuds ajoutés à la source.

+0

Avez-vous essayé ma suggestion MODIFIES? – jensgram

+0

Hiya ouais juste essayé cela - même erreur qu'avant! – MrFidge

+0

OK mis à jour complètement ci-dessus pour refléter la nouvelle situation - J'ai vraiment besoin de faire fonctionner cela, je ne vois pas une autre façon de le faire :) – MrFidge

Répondre

1

Afin de vous assurer que le nœud ahref est enveloppé ...

foreach($ahrefs as $ahref) { 
    $valueID = $ahref->getAttribute('name'); 
    $pseudostart = $dom->createTextNode('%%' . $valueID . '%%'); 
    $pseudoend = $dom->createTextNode('%%/' . $valueID . '%%'); 
    $ahref->parentNode->insertBefore($pseudostart, $ahref); 
    $ahref->parentNode->insertBefore($ahref->cloneNode(true), $ahref); // Inserting cloned element (in order to insert $pseudoend immediately after) 
    $ahref->parentNode->insertBefore($pseudoend, $ahref); 
    $ahref->parentNode->removeChild($ahref); // Removing old element 
} 
print $dom->saveXML(); 
+0

Hiya - voir ci-dessus - montre toujours la même erreur: S – MrFidge

+0

Hiya, je cherche à trouver chaque complète A tag description, puis mis $ pseudo -art avant le MrFidge

+2

Dans ce cas, vous voudrez probablement ajouter les "pseudo-éléments" en tant que textNodes en utilisant 'insertBefore()' et appendChild() '(sur le parent de' ahref'). – jensgram