2016-12-15 67 views
0

我正在使用Rails 4.2.7与Nokogiri。如何创建一个新的Nokogiri节点添加到我的文档中?我想我能做到这一点为什么我无法创建一个Nokogiri节点?

general = doc.xpath("//lomimscc:general") 
title = Nokogiri::XML::Node.new "lomimscc:title" 
string = Nokogiri::XML::Node.new "lomimscc:string" 
string.content = scenario.title 
string.language = 'en' 
title << string 
general << title 

,但我得到的错误

ArgumentError: wrong number of arguments (given 1, expected 2+) 
    from /Users/davea/Documents/workspace/sims/app/helpers/myproject_helper.rb:73:in `new' 
    from /Users/davea/Documents/workspace/sims/app/helpers/myproject_helper.rb:73:in `set_manifest_title' 
    from /Users/davea/Documents/workspace/sims/app/helpers/myproject_helper.rb:59:in `generate_manifest_file 

回答

0

Nokogiri::XML::Node.new预计2个参数。从rdoc

.new(name, document) ⇒ Object 
0

这是一个很大很容易,你正在做的:

require 'nokogiri' 

doc = Nokogiri::HTML(<<EOT) 
<html> 
    <body> 
    </body> 
</html> 
EOT 

在这一点上有一个分析的文档,看着身体会表现出它是空的:

doc.at('body').to_html # => "<body>\n </body>" 

Nokogiri足够聪明,知道如果将它作为字符串传递给节点该怎么办:

doc.at('body').inner_html = '<p>foo</p>' 
doc.at('body').to_html # => "<body><p>foo</p></body>" 

它解析了字符串,然后将其添加为正文的内部HTML。

它也可以根据其他一些节点上添加节点:

doc.at('p').add_next_sibling('<p>bar</p>') 
doc.at('body').to_html # => "<body>\n<p>foo</p>\n<p>bar</p>\n</body>" 

当你阅读文档密切关注的参数,因为你会看到node_or_tags这意味着它需要引入nokogiri :: XML: :节点或描述要插入内容的字符串。

这也意味着它真的很容易使用字符串插值控件插入什么:

t = 'foobar' 
doc.at('body').inner_html = "<p>#{t}</p>" 
doc.at('body').to_html # => "<body><p>foobar</p></body>" 
相关问题