使用xPath提取文本

时间:2014-08-20 13:28:16

标签: xpath

我在xPath中遇到了问题。

我这样做:

//tbody/tr[td]*[2]/span/@onmouseover

结果:

showMsgBox('Monster')
showMsgBox('Limber')
showMsgBox('Carson')
showMsgBox('Maniac')

我需要文字,我可以提取不同的文字吗?我在Chrome中使用了刮刀。谢谢大家。

1 个答案:

答案 0 :(得分:1)

所以看起来你有这样的HTML结构:

<tbody>
  <tr>
    <td>
      <span onmouseover="showMsgBox('Monster')"></span>
    </td>
  </tr>
</tbody>

你正试图让Monster离开它。

由于你没有分享你的HTML,我快速尝试复制类似于它的东西。它的意思是说明性的,与你的不完全匹配。

只有XPath才能做到这一点。 XPath允许您选择DOM中的节点。您在此HTML中使用XPath可以达到的最低级别正是您已有的:

//tbody/tr[td]*[2]/span/@onmouseover

返回

showMsgBox('Monster')

如果要从中提取Monster,则必须使用其他机制,例如简单的字符串操作或正则表达式。

字符串操作

var text = "showMsgBox('Monster')";
text = text.substring( "showMsgBox('".length );
text = text.substring(0, text.length - "')".length);

或者如果你不介意魔法常数:

var text = "showMsgBox('Monster')";
text = text.substring(12);
text = text.substring(0, text.length - 2);

或使用slice进行单一操作:

text.slice(12, -2)

正则表达式

您也可以使用正则表达式来提取文本,但我觉得这不会让事情变得更好。

var text = "showMsgBox('Monster')";
new RegExp("showMsgBox\\('(.*)'\\)").exec(text)[1]

/showMsgBox\('(.*)'\)/.exec(text)[1]