2016-12-15 5 views
0

Nokogiri에서 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

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로 추가했습니다.

또한 다른 노드를 기반으로 노드를 추가 할 수 있습니다 : 당신이 그것을 의미 node_or_tags를 볼 수 있기 때문에

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>" 

당신이 문서를 읽어

이 매개 변수에주의는 노코 기리 :: XML을합니다 : : 삽입 할 내용을 설명하는 노드 또는 문자열입니다.

이 또한 삽입 무엇을 제어하기 위해 문자열 보간을 사용하기 정말 쉽게 의미

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