9
votes

PHP DOM - Compter les noeuds d'enfants?

snippet html # 1 strong> xxx pré>

HTML Snippet # 2 strong> p>

$doc->preserveWhiteSpace = false;


2 commentaires

Ceci est une question de type forum. Donc, ce n'est pas un forum, vous n'êtes pas nouveau ici, vous devriez savoir ...


@Dainisabols: de la FAQ: (...) Si votre question couvre généralement un problème de programmation spécifique, un algorithme logiciel, des outils logiciels couramment utilisés par les programmeurs, des problèmes pratiques et responsables propres à la profession de programmation - alors vous êtes dans votre Le bon endroit pour poser votre question! En ce sens, ma question se qualifie. Sortez ça vote.


3 Réponses :


3
votes

WhitSpace est considéré comme un nœud car il s'agit d'un nœud () em> ( domtext code>).

Vous pouvez faire ce travail en modifiant votre pour " / Code> Boucle: P>

foreach ($divs as $div) {
    echo $div->childNodes->length - $xpath->query('./text()', $div)->length, '<br>';
}


0 commentaires

0
votes

Firefox, chrome et la plupart des autres navigateurs, traiteront des espaces blancs vides ou de nouvelles lignes sous forme de nœuds de texte, Internet Explorer ne sera pas.Checker ici


1 commentaires

Intéressant, je n'étais pas au courant de ça. Jusqu'à une heure il y a une heure, je pensais que Whitaespace était juste des espaces ...



6
votes

Il suffit de compter les nœuds non-texte dans votre boucle:

$textNodes = $xpath->query('//text()');

foreach($textNodes as $node)
  if(trim($node->wholeText) === '')
    $node->parentNode->removeChild($node);


7 commentaires

Belle solution de contournement! Mais y a-t-il un moyen de supprimer tous les espaces?


réglage préserverwhiteespace à FALSE devrait faire cela, mais il semble que ce n'est pas toujours fiable


Le HTML est-il valide? Notez que vous devez mettre cette ligne avant -> loadhtml


Le HTML est comme dans ma question. J'ai préservewhitepace = false avant loadhtml , ne fonctionne pas cependant. J'aime cette solution de contournement XPath.


Si vous exécutez sur Windows, peut-être qu'elle est liée à ce bogue ?


Laissez-nous Continuer cette discussion en chat


Ce n'est pas récursif