2010-05-26 6 views
1

J'écris un script Greasemonkey, et je voulais changer le texte d'un message sur un forum phpBB2 en utilisant XPath pour sélectionner le corps de la publication qui se produit après un certain nom d'utilisateur, mais le tout est un gâchis géant de tables.Expression XPath pour un forum phpBB

<tr> 
    <td> 
    <span class="name"> 
     <a> 
     <b>username</b> 
    </span> 
    <span></span> 
    </td> 
    <td> 
    <table> 
     <tbody> 
     <tr></tr> 
     <tr></tr> 
     <tr> 
      <td> 
      <span class="postbody">text of post</span> 
      <span></span> 
      </td> 
     </tr> 
     </tbody> 
    </table> 
    </td> 
</tr> 

J'ai besoin de la durée postbody qui se produit après le nom d'utilisateur dans la balise b est égal à un certain nom, puis mess avec le texte. Voici comment je suis en train de le faire:

var postguy = document.evaluate('fffffff', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); 
for (var i = 0; i < postguy.snapshotLength; i++) { 
    thisLink = postguy.snapshotItem(i); 
    //then do something with the post 
} 

Répondre

3

Je ferais comme ça:

//tr[.//b/text()='username']//span[@class='postbody'] 

Pour aligner les commentaires, vous pouvez réduire les choses un peu en limitant où le b étiquette est:

//tr[.//span[@class='name']//b/text()='username']//span[@class='postbody'] 

Merde! J'étais trop pressé pour ces @ s. Je dois ralentir et sentir les @ parfois.

+0

Donnera un faux positif si quelqu'un met le nom d'utilisateur magique en gras dans leur texte de message, j'imagine - je pense que nous devons restreindre la recherche du nom d'utilisateur à la portée de la classe 'name'. – AakashM

+0

@AakashM: Une bonne suggestion. Je vais ajouter la restriction. – Welbog

+0

Vous devez mettre un @ devant les classes. – Biff

Questions connexes