2017-01-25 4 views
0

У меня есть Nokogiri::XML::Builder экземпляр, когда я называю to_xml он производит следующую структуру:Добавить узел в XML с помощью Nokogiri :: XML :: Builder

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <item>...</item> 
    <item>...</item> 
</root> 

Используя этот экземпляр, я хотел бы добавить еще один <item> узел под <root> так:

def add_static_job(builder) 
    source = builder.doc.root 
    item = Nokogiri::XML::Node.new('item', source) 
    item.content = '<title>Hello</title>' 
    source << item 
end 

Unfortunatelly это не дает правильный XML, в конце концов, а что-то вроде:

<item>&lt;title&gt;Hello&lt;title&gt;</item> 

В чем проблема?

ответ

0

Вы можете сделать это в 2 этапа:

  • создания заголовка узла с "Hello", как содержание
  • создать узел элемента с названием как содержание

xml = '<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <item>A</item> 
    <item>B</item> 
</root>' 

require 'nokogiri' 

doc = Nokogiri::XML.parse(xml) 

source = doc.root 

title = Nokogiri::XML::Node.new('title', doc) 
title.content = "Hello" 

item = Nokogiri::XML::Node.new('item', doc) 
item << title 

source << item 

puts doc 

# => 
# <?xml version="1.0" encoding="UTF-8"?> 
# <root> 
# <item>A</item> 
# <item>B</item> 
# <item><title>Hello</title></item></root> 
Смежные вопросы