我正在使用Rails 4.2.7与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 :(得分:0)
Nokogiri::XML::Node.new
需要2个参数。来自rdoc:
.new(name, document) ⇒ Object
答案 1 :(得分: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 :: Node或一个描述要插入的内容的字符串。
这也意味着使用字符串插值来控制插入内容非常容易:
t = 'foobar'
doc.at('body').inner_html = "<p>#{t}</p>"
doc.at('body').to_html # => "<body><p>foobar</p></body>"