首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nokogiri法误差

Nokogiri法误差
EN

Stack Overflow用户
提问于 2016-11-03 20:08:49
回答 1查看 478关注 0票数 1

我正在使用Nokogiri作为一个工具来帮助我做一个我正在为学校工作的项目。现在,该项目的思想是搜索HTML文档,以查找用户提供的关键字。该函数将在<body>元素之后查找HTML中的所有关键字,除非关键字出现在HTML中,然后用标记包围找到的字符串,以突出显示‘’关键字。现在,我的代码出现了严重的错误调用堆栈失败。主要错误是: Nokogiri::CSS::SyntaxError:unexpected'$'after'':substring_match,“简单”(Nokogiri::CSS::SyntaxError)

我当前的方法:

代码语言:javascript
复制
require 'nokogiri'

file = File.open ("desktop/Personal/code.HTML")

@doc = Nokogiri::HTML(file)

puts @doc

puts "Welcome to the HTML keyword highlighter!"
puts "Please enter a keyword"
keyword = gets.chomp

highlight = "<span style='background-color: yellow; color: black'>#{keyword}</span>"

search = @doc.xpath("//body").search("[text()*=#{keyword}")

search.each do |node|
    nodeN = node.name
    nodeH = node.content.gsub(keyword, highlight)
    node.replace(nodeH)
end
file.close

错误调用堆栈:

代码语言:javascript
复制
     /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/gems/2. 0.0/gems/nokogiri-1.5.6/lib/nokogiri/css/parser_extras.rb:87:in `on_error': unexpected '$' after '[:substring_match, "simple"]' (Nokogiri::CSS::SyntaxError)
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/racc/parser.rb:258:in `_racc_do_parse_c'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/racc/parser.rb:258:in `do_parse'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/gems/2.0.0/gems/nokogiri-1.5.6/lib/nokogiri/css/parser_extras.rb:62:in `parse'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/gems/2.0.0/gems/nokogiri-1.5.6/lib/nokogiri/css/parser_extras.rb:79:in `xpath_for'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/gems/2.0.0/gems/nokogiri-1.5.6/lib/nokogiri/css.rb:23:in `xpath_for'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/gems/2.0.0/gems/nokogiri-1.5.6/lib/nokogiri/xml/node_set.rb:111:in `block (2 levels) in css'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/gems/2.0.0/gems/nokogiri-1.5.6/lib/nokogiri/xml/node_set.rb:109:in `map'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/gems/2.0.0/gems/nokogiri-1.5.6/lib/nokogiri/xml/node_set.rb:109:in `block in css'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/gems/2.0.0/gems/nokogiri-1.5.6/lib/nokogiri/xml/node_set.rb:239:in `block in each'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/gems/2.0.0/gems/nokogiri-1.5.6/lib/nokogiri/xml/node_set.rb:238:in `upto'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/gems/2.0.0/gems/nokogiri-1.5.6/lib/nokogiri/xml/node_set.rb:238:in `each'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/gems/2.0.0/gems/nokogiri-1.5.6/lib/nokogiri/xml/node_set.rb:105:in `css'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/gems/2.0.0/gems/nokogiri-1.5.6/lib/nokogiri/xml/node_set.rb:81:in `block in search'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/gems/2.0.0/gems/nokogiri-1.5.6/lib/nokogiri/xml/node_set.rb:80:in `each'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/gems/2.0.0/gems/nokogiri-1.5.6/lib/nokogiri/xml/node_set.rb:80:in `search'
    from /Users/Eva/Desktop/Personal/Project_Nokogiri.rb:21:in `<main>'

任何关于如何防止这件事的建议都是非常感谢的!我刚开始编程,Ruby和Nokogiri,所以我对如何自己解决这个问题知之甚少。如果格式设置不好,很抱歉。谢谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2016-11-04 01:47:04

你忘了关闭方括号:

代码语言:javascript
复制
search = @doc.xpath("//body").search("[text()*=#{keyword}]")

我会加引号以防万一:

代码语言:javascript
复制
search = @doc.xpath("//body").search("[text()*=\"#{keyword}\"]")

(如果双引号在keyword中是防弹的,您也可以通过确保双引号转义来扩展它)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40410368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档