Добавление элементов с помощью Nokogiri::XML::Builder

У меня есть следующий код:

builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
  xml.myRoot do |xml|
    xml.oneChild
    xml.anotherChild
  end
end

Теперь я хочу добавить несколько дочерних узлов в myRoot с помощью компоновщика (на втором этапе я знаю, как сразу их добавить). Как мне это сделать?

Я пробовал это:

node = builder.doc.xpath('//myRoot/oneChild').first
Nokogiri::XML::Builder.with(node) do |xml|
  xml.childOfOneChild 'Im a child of oneChild'
end

Что не работает. Они не будут прилипать к элементу, это просто пустой oneChild.


person sandstrom    schedule 08.04.2011    source источник


Ответы (1)


Ваш код создает следующий XML, который, похоже, соответствует вашим спецификациям. Во всяком случае, он не создает пустой oneChild. Если это не то, что вы ищете, можете ли вы сказать нам, каким был бы ваш идеальный результат?:

builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
  xml.myRoot do |xml|
    xml.oneChild
    xml.anotherChild
  end
end

puts builder.to_xml

# <?xml version="1.0" encoding="UTF-8"?>
# <myRoot>
#   <oneChild/>
#   <anotherChild/>
# </myRoot>   

node = builder.doc.xpath('//myRoot/oneChild').first
Nokogiri::XML::Builder.with(node) do |xml|
  xml.childOfOneChild 'Im a child of oneChild'
end

puts builder.to_xml

# <?xml version="1.0" encoding="UTF-8"?>
# <myRoot>
#   <oneChild>
#     <childOfOneChild>Im a child of oneChild</childOfOneChild>
#   </oneChild>
#   <anotherChild/>
# </myRoot>
person michaelmichael    schedule 08.04.2011
comment
Интересно, а где ОП? это сработало для меня, большое спасибо. документация: rdoc.info/github/tenderlove/nokogiri/master /Нокогири/XML/ - person tokland; 21.05.2011