2009-12-22 2 views
15

Nokogiri를 사용하여 XML 문서를 작성하려고합니다. 일부 요소에는 하이픈이 있습니다.요소 이름에 하이픈이있는 Nokogiri :: XML :: Builder를 사용하여 XML을 만드는 방법은 무엇입니까?

syntax error, unexpected tSTRING_BEG, expecting kDO or '{' or '(' 
    xml.foo-bar "hello" 

지금은이 때문입니다 실현 :

require "nokogiri" 
builder = Nokogiri::XML::Builder.new do |xml| 
    xml.foo_bar "hello" 
end 

puts builder.to_xml 

생산 :

<?xml version="1.0"?> 
<foo_bar>hello</foo_bar> 

을하지만, 내가하려고하면

builder = Nokogiri::XML::Builder.new do |xml| 
    xml.foo-bar "hello" 
end 

내가 얻을 다음은 예입니다 하이픈은로 해석됩니다..

어떻게해야합니까? 여기

답변

40

당신은 이동 :

require 'nokogiri' 

b = Nokogiri::XML::Builder.new do |xml| 
    xml.send(:"fooo-bar", "hello") 
end 

puts b.to_xml 
+4

헬로우에서 오는가 :

<?xml version="1.0"?> <foo-bar>hello</foo-bar> 

당신이

require 'nokogiri' b = Nokogiri::XML::Builder.new do |xml| xml.send(:'foo-bar') { xml.send(:'bar-foo', 'hello') } end puts b.to_xml 

가 생성 블록을 전달할 수 있습니다 그 다음 중첩 될 수있는 필요한 경우 ? xml.send (: "foo-bar", "hello")? – Angela

+1

공식 Nokogiri 문서에 문서화 된 문서는 어디에 있습니까? 링크를 공유 할 수 있습니까? – yegor256

+1

@ yegor256 여기 있습니다 : http://www.rubydoc.info/github/sparklemotion/nokogiri/Nokogiri/XML/Builder – bonh

3

아론 패터슨의 답변이 정확하고 그렇지 않으면 루비 파서에 의해 해석 될 수있는 문자를 포함하는 요소 이름에 대해 작동합니다.

안젤라의 질문에 대답 :

require 'rubygems' 
require 'nokogiri' 

b = Nokogiri::XML::Builder.new do |xml| 
    xml.send(:'foo.bar') { 
    xml.text 'hello' 
    } 
end 

puts b.to_xml 
26

바트 Vandendriessche의 대답은 작동하지만 당신은 단지 내에서 텍스트 필드를 원하는 경우 간단한 해결책이있다 : 당신이 뭔가를 할 수있는이 방법으로 만든 요소 내에 텍스트를 배치하기 요소.

require 'nokogiri' 

b = Nokogiri::XML::Builder.new do |xml| 
    xml.send(:"foo-bar", 'hello') 
end 

puts b.to_xml 

는 생성 :

<?xml version="1.0"?> 
<foo-bar> 
    <bar-foo>hello</bar-foo> 
</foo-bar>