Добавлять элементы используя Nokogiri :: XML :: Builder - PullRequest
5 голосов
/ 08 апреля 2011

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

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.

1 Ответ

16 голосов
/ 08 апреля 2011

Ваш код производит следующий 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>
...