Ваш пример не имеет смысла;Вы говорите, что хотите «кодировать», а затем пытаетесь написать «закодировано».
Ваш пример не имеет смысла, так как это недопустимый XML.У вас есть открывающий тег encode
с пространством имен content
, а затем вы пытаетесь закрыть его тегом content
.Вы хотите либо <content:encode>text</content:encode>
, либо <encode:content>text</encode:content>
. (Что вы хотите?)
Вы не последовали примеру в приведенной вами ссылке.Если вам нужен элемент content
с пространством имен encoded
, то в примере вы должны написать:
xml['encoded'].content{ xml.text "text" }
Однако, также в этом примере вы должны объявить любые пространства имен, которые выхочу ссылку.Так что сделайте это:
require 'nokogiri'
builder = Nokogiri::XML::Builder.new do |xml|
xml.root('xmlns:encoded' => 'bar') do
xml['encoded'].content{ xml.text "text" }
end
end
puts builder.to_xml
#=> <?xml version="1.0"?>
#=> <root xmlns:encoded="bar">
#=> <encoded:content>text</encoded:content>
#=> </root>
Редактировать : Если вам действительно нужен только один элемент без корня, использование Nokogiri является излишним.Просто сделайте:
str = "Hello World"
xml = "<encoded:content>#{str}</encoded:content>"
puts xml
#=> <encoded:content>Hello World</encoded:content>
Если вам действительно нужно использовать Nokogiri, но вы хотите только первый дополнительный элемент root, выполните:
xml_str = builder.doc.root.children.first.to_s
#=> "<encoded:content>text</encoded:content>"