2009-09-06 10 views
1

Supposons que j'ai le code HTML suivant:Trouver l'index de caractère d'un nœud dans son nœud parent avec hpricot

html = Four score and seven <b>years ago</b> 

Je veux analyser cela avec hpricot:

doc = Hpricot(html) 

Trouver le nœud <b>:

node = doc.at('b') 

puis obtenir l'index de caractère du nœud <b> dans son parent:

node.character_index 
=> 22 

Comment puis-je faire (à savoir, quelle est la version réelle de la fonction character_index() je viens d'inventer)?

Répondre

1

Je ne pense pas que Hpricot fonctionne comme ça. Voici ce que je me fais un « node.inspect » en fonction de votre exemple

node.inspect 
"{elem <b> \"years\" </b>}" 

Ainsi, la position dans l'ensemble du texte que vous demandez est tout simplement pas là.

Cependant, il y a un nombre limité de choses que vous auriez probablement souhaitez utiliser l'index et vous pouvez être en mesure de faire ces à travers le standard Hpricot methods

+0

Voir aussi ce sujet Ruby-Forum: http: // www .ruby-forum.com/topic/167535 où cette même question est posée par quelqu'un qui veut vérifier les liens. Points importants: ** 1) ** Pourquoi faire quand "La position du caractère n'a pas de sens dans un DOM XML et HTML Whitespace peut changer de position sans affecter le DOM" et ** 2) ** Utiliser libxml comme alternative depuis "libxml stocke le numéro de ligne de chaque élément, ce qui vous permet d'extraire tous les liens, de les vérifier et d'imprimer element.line_num pour chacun des éléments qui échouent" – atomicules

Questions connexes