Внедрение XML-фрагмента в текущий документ из внешнего файла

В настоящее время я разбираю файл XML с помощью REXML и пытаюсь придумать способ вставки фрагмента XML из внутреннего файла.

В настоящее время я использую некоторую логику, подобную следующей:

doc.elements.each('//include') do |element|
  handleInclude( element )
end

def handleInclude( element )      
  if filename = element.attributes['file']
    data = File.open( filename ).read
    doc = REXML::Document.new( data )
    element.parent.replace_child( element, doc.root )
  end
end

Где мой XML выглядит следующим образом:

<include file="test.xml" />

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


person makenai    schedule 25.05.2010    source источник


Ответы (1)


В настоящее время я нашел способ заставить эту работу работать, создав искусственный корневой элемент и выполнив серию вставок/удалений, как показано ниже:

  doc = REXML::Document.new( "<include>#{data}</include>" )
  previous_element = element
  doc.root.elements.each do |child|
    element.parent.insert_after( previous_element, child )
    previous_element = child
  end
  element.parent.delete( element )

Это заставляет меня чувствовать, что должен быть лучший способ.

person makenai    schedule 25.05.2010