Я использую Ruby для добавления новых элементов в выбранные узлы XML. Как это:
require 'rexml/document'
include REXML
xml = <<EOF
<fmxmlsnippet type="FMObjectList">
<Step name="Variable"/>
<Step name="Comment"/>
<Step name="Variable"/>
</fmxmlsnippet>
EOF
doc = Document.new xml
el = Element.new 'node'
doc.elements.each( "//Step[@name=\"Variable\"]"){ |e|
e.previous_sibling = el
e.next_sibling = el
}
doc.write( $stdout, 2 )
Это структура, которую я хочу:
<fmxmlsnippet type='FMObjectList'>
<node/>
<Step name='Variable'/>
<node/>
<Step name='Comment'/>
<node/>
<Step name='Variable'/>
<node/>
</fmxmlsnippet>'
Но это то, что я получаю с кодом выше:
<fmxmlsnippet type='FMObjectList'>
<Step name='Variable'/>
<Step name='Comment'/>
<Step name='Variable'/>
<node/>
</fmxmlsnippet>'
Что я делаю не так?
Полагаю, это связано с моим непониманием того, как выполняется блок. Кажется, путь работает, потому что он может печатать атрибуты нужных элементов просто отлично.
Я бы хотел остаться с REXML, потому что это часть дистрибутива Ruby, но я бы рассмотрел Nokogiri, если смогу заставить его работать таким образом.