- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
在 jQuery 中,您可以使用 :eq
选择器将匹配元素集缩减为具有给定索引的元素。
Nokogiri 如何做到同样的事情?我搜索了很长时间,但找不到方法。
看这个例子:
require 'nokogiri'
html ='
<div>
<p>foo</p></div>
<span>
<p>bar</p>
<p>foobar</p></span>
'
doc = Nokogiri::HTML(html)
p doc.search('p:eq(0)')
# -> []
最佳答案
我是这样钓鱼的:
require 'nokogiri'
html ='
<p>foo</p>
<p>bar</p>
<p>foobar</p>
'
doc = Nokogiri::HTML(html)
doc.search('//p[3]')
=> [#<Nokogiri::XML::Element:0x811058ac name="p" children=[#<Nokogiri::XML::Text:0x81104f74 "foobar">]>]
Nokogiri 返回了一个 NodeSet,它是一组节点,就像一个数组。我可以使用 at
进行搜索而不是 search
仅检索节点:
doc.at('//p[3]').text
=> "foobar"
或者它可以返回 NodeSet,您可以让 Ruby 从中提取特定元素:
doc.search('//p')[2].text
=> "foobar"
p doc.search('p:eq(0)')
'p:eq(0)'
不是 CSS,也不是 XPath。它是添加到 JavaScript 的 jQuery 选择器。您不能将 jQuery 或 JavaScript 与 Nokogiri 一起用作访问器,它必须是 CSS 或 XPath。
Your example doesnt even do what I want. The [i] operator is comparable to the nth-child!
根据 jQuery's documentation for :eq
:
Description: Reduce the set of matched elements to the one at the specified index.
//p[3]
,或使用 search('p')[2]
让 Ruby 对 NodeSet 进行切片,将返回一个特定的节点。在我的示例中,我正在检索第三个 <p>
的内容标签,相当于 jQuery 的 :eq(2)
.
使用与之前相同的示例:
require 'nokogiri'
html ='
<p>foo</p>
<p>bar</p>
<p>foobar</p>
'
doc = Nokogiri::HTML(html)
doc.search('//p[0]').text
doc.search('//p[1]').text
doc.search('//p[2]').text
doc.search('//p[3]').text
doc.search('//p')[0].text
doc.search('//p')[1].text
doc.search('//p')[2].text
doc.search('//p')[3].text
我看到将其转储到 IRB 中:
irb(main):011:0* doc.search('//p[0]').text # => ""
irb(main):012:0> doc.search('//p[1]').text # => "foo"
irb(main):013:0> doc.search('//p[2]').text # => "bar"
irb(main):014:0> doc.search('//p[3]').text # => "foobar"
irb(main):015:0> doc.search('//p')[0].text # => "foo"
irb(main):016:0> doc.search('//p')[1].text # => "bar"
irb(main):017:0> doc.search('//p')[2].text # => "foobar"
irb(main):018:0> doc.search('//p')[3].text
NoMethodError: undefined method `text' for nil:NilClass
from (irb):18
使用 //p[1]
相当于将下面的 HTML 与 JavaScript 和 jQuery 一起使用,将其加载到浏览器中,然后查看显示“foo”的警报:
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
</head>
<body>
<p>foo</p>
<p>bar</p>
<p>foobar</p>
<script>
$().ready(function(){
alert($('p:eq(0)').text());
});
</script>
</body>
</html>
所以,//p
用[1]
在 XPath 中切片或 [0]
在 Ruby 中,相当于 :eq(0)
在 JavaScript 中。但是,由于 Nokogiri 不执行 JavaScript 或 jQuery,您必须使用 CSS 或 XPath。
jQuery 的选择器现在可用,使这样的事情成为可能:
require 'nokogiri'
html = '
<html>
<body>
<p>foo</p>
this text
<p>bar</p>
</body>
</html>
'
doc = Nokogiri::HTML(html)
doc.at('p:contains("foo")').next_sibling.text.strip
=> "this text"
关于jquery - 如何使用:eq selector in Nokogiri,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13289886/
我在 OSX 上使用 RVM 和之前的 RBENV。我在 ./gems 中相对于我的项目路径安装了我的 gems 我正在使用 aws-sdk 并尝试使用 s3 客户端导致 nokogiri/nokog
我正在尝试使用以下版本在 Mac OS Big Sur 上构建 Rails 应用程序...... $ rails --version Rails 5.0.7.2 $ ruby --version ru
我正在尝试抓取 http://www.ign.com/games/reviews使用 Nokogiri,我想实例化与页面上每个游戏评论相对应的新评论对象。当然,我还想从每条评论中获取每个数字分数,并将
我正在编写 Lynda 的 Ruby on Rails 教程,一切都按预期进行。所有安装和一切都运行完美。 但是创建项目后,当我尝试启动服务器(cmd:rails server)时,我收到错误消息:
尝试按如下方式在生产模式下运行 rake Assets 预编译。 rake assets:precompile 它在 ubuntu 14.04(32 位)和 16.06(32 位)上运行良好。但是在
我需要一种方法来运行 nokogiri 脚本 #parser.rb require 'nokogiri' def parseit() //... end 并在 jruby 的 main.rb 下面运行
在解析缩进的 XML 时,不重要的空白文本节点是从结束标记和开始标记之间的空白创建的。例如,来自以下 XML: Tove Jani Reminder Don't forget me
Nokogiri 在我的 gem 文件中。 bundle 安装返回预期的输出: Using nokogiri (1.4.4) Your bundle is complete! Use `bundle
我安装了 Ruby 和 Nokogiri gem。在 irb 中,我尝试: require 'nokogiri' require 'open-uri' url = 'http://www.amazon
我想使用 XSL 将 XML 文档转换为 HTML,稍微修改一下,然后将其呈现出来。这基本上就是我正在做的: source = Nokogiri::XML(File.read 'source.xml'
我的 Ruby on Rails 应用程序使用 Rails 2.2.2 和 Ruby 1.8.7。 尝试运行时 RAILS_ENV=production rake gems:install 或任何佣金
在 IRB 中,当我键入 require“nokogiri”时,出现以下错误: LoadError: cannot load such file -- nokogiri 我的 gemfile 中安装了
我正在使用 DevKit 在 Windows 8.1 上运行全新安装的 Ruby 2.2.1。安装后我运行: gem install rails rails new testapp cd testap
我正在尝试安装 nokogiri,因为它是启动 rails 所必需的 $ rails s /usr/local/rvm/gems/ruby-1.9.3-p194@global/gems/bun
我终于设法解析了网站的部分内容: get '/' do url = '' data = Nokogiri::HTML(open(url)) @rows = data.css("td[val
我第一次使用 Nokogiri 搜索 HTML 文档。当我创建一个变量(并打印)时,它等于: beteween Nokogiri::HTML(open(url).read) 它似乎输出与完全相同的东西
如果我尝试安装 nokogiri,我会收到以下错误: rvmsudo gem install nokogiri ERROR: Error installing nokogiri: nokog
我在屏幕抓取 rake 任务中有以下代码 page = agent.get("https://domainname.co.uk/unit/27/logs?type=incoming&page=8")
我尝试(出于测试目的)解析 Google 商家 XML 提要,定义为: EasyOptic 2014-08-01T16:31:
如何将“foo”替换为“bar”? 来自 foo1foo2foo4foo5foo6 至 bar1bar2bar4bar5bar6 我只想替换标签内部内容,没有标签属性。 有什么想法吗? 最佳答案 re
我是一名优秀的程序员,十分优秀!