【问题标题】:XPath to find anchor with specific domain in this HTMLXPath 在此 HTML 中查找具有特定域的锚点
【发布时间】:2011-01-22 00:46:59
【问题描述】:

我有以下 HTML

<div id="profile-bio-full">
  <p>Bla bla bla bla </p>
  <p>Site: <a href="http://www.something.com" rel="nofollow">something.com</a></p>
  <p>Facebook: <a href="http://www.facebook.com" rel="nofollow">facebook.com</a></p>
  <p>Twitter: <a href="http://www.twitter.com" rel="nofollow">www.twitter.com</a></p>
</div>

我需要获取 Twitter URL(href "a" 属性)。

我正在使用带有 Nokogiri gem 的 Rails,并使用 Nokogiri xPath 功能。

我正在使用这个 xPath

//div[contains(@id, "profile-bio-full")]/a[contains(@href, "twitter.com")]

但不工作:(。有什么猜测吗?

【问题讨论】:

  • “不工作”应该是一个直接的危险信号,告诉您指定(a)您想要发生的事情,以及(b)实际发生的事情。换句话说,是什么经验数据让你相信它不起作用?

标签: ruby-on-rails xpath nokogiri


【解决方案1】:

a 匹配器之前的单个正斜杠指定 a 元素必须是 div 的直接子元素 - 但不是,它是 p 的子元素。

您可以这样做:

//div[contains(@id, "profile-bio-full")]/p/a[contains(@href, "twitter.com")]

或者您可以将 /a 更改为 //a 以表示 a 必须是后代而不是直系孩子。

//div[contains(@id, "profile-bio-full")]//a[contains(@href, "twitter.com")]

【讨论】:

  • 请注意,如果您确切地知道id,则可以使用XPath 使这变得更简单、更快://div[@id="profile-bio-full"]//a[contains(@href,"twitter.com")]
  • @Phrogz:+1 我同意:标识符应该完全匹配。
猜你喜欢
  • 2012-04-11
  • 1970-01-01
  • 2011-07-06
  • 2013-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多