2010-05-26 52 views
1

我正在写一个Greasemonkey脚本,并且我想通过使用XPath来选择在某个用户名之后发生的帖子正文,从而在phpBB2论坛上更改论坛帖子的文本,但整个事情是一堆巨大的桌子。phpBB论坛的XPath表达式

<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> 

我需要得到在b标签中的用户名等于某个名称后发生的后身跨度,然后弄乱文本。下面是我想做到这一点:

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 
} 

回答

3

我会做这样的:

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

为了与意见一致,你可以通过限制在b缩小东西下来了一点标签是:

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

该死!我太急于为那些@ s。放慢速度,有时会闻到@

+0

如果有人将神奇的用户名加粗显示在他们的帖子文本中,会给出误判,我想 - 我想我们需要将搜索用户名限制在'name'类的范围内。 – AakashM 2010-05-26 15:56:11

+0

@AakashM:一个公平的建议。我将添加限制。 – Welbog 2010-05-26 15:56:57

+0

你需要在类的前面放一个@。 – Biff 2010-05-26 20:07:21